package br.edu.ifba.ads.mediaCenter;

import br.edu.ifba.ads.mediaCenter.exceptions.ArquivoNaoArmazenadoException;
import br.edu.ifba.ads.mediaCenter.exceptions.BuscavelNaoEncontradoException;
import br.edu.ifba.ads.mediaCenter.exceptions.FragmentoNaoArmazenadoException;

public class App{
    
    public void run(){
        MediaCenter media = new MediaCenter();
        
        ServidorReplicado s1 = new ServidorReplicado("anubis");
        ServidorReplicado s11 = new ServidorReplicado("thot");        
        
        s11.addServidor(new ServidorBasico("osiris", 512, 0.25, 0.25));
        s11.addServidor(new ServidorBasico("isis", 256, 0.1, 0.1));        
        
        s1.addServidor(s11);
        s1.addServidor(new ServidorBasico("bast", 512, 0.05, 0.05));
        
        media.addServidor(new ServidorBasico("horus", 1024, 0.5, 0.8));
        media.addServidor(new ServidorBasico("ra", 1024, 0.4, 1.0));        
        media.addServidor(s1);        

        Arquivo a1 = new Arquivo("S1");
        
        a1.addFragmento(new Fragmento("S1.1", 100));
        a1.addFragmento(new Fragmento("S1.2", 100));
        a1.addFragmento(new Fragmento("S1.3", 100));        
        
        System.out.println(media);
        
        try {
			System.out.println("Tempo de armazenamento de " + a1 + ": " + media.getTempoArmazenamento(a1) + "\n");
		} catch (FragmentoNaoArmazenadoException e) {
			System.out.println("Fragmento no armazenado: " + e.getId() + "\n");
		}
        
        System.out.println(media);        
        
        Arquivo a2 = new Arquivo("S2");
        a2.addFragmento(new Fragmento("S2.1", 200));
        a2.addFragmento(new Fragmento("S2.2", 200));
        a2.addFragmento(new Fragmento("S2.3", 100));          
        a2.addFragmento(new Fragmento("S2.4", 100));          
        
        try {
			System.out.println("Tempo de armazenamento de " + a2 + ": " + media.getTempoArmazenamento(a2) + "\n");
		} catch (FragmentoNaoArmazenadoException e) {
			System.out.println("Fragmento no armazenado: " + e.getId() + "\n");
		}
        
        System.out.println(media);        

        try{
	        System.out.println("Tempo de Recuperacao de " + a2 + ": " + media.getTempoLeitura("S2") + "\n");        
        	System.out.println("Tempo de Recuperacao de A3 (no existe): " + media.getTempoLeitura("OutroArquivo") + "\n");
	        System.out.println("Tempo de Recuperacao de " + a1 + ": " + media.getTempoLeitura("S1") + "\n");
        }catch(BuscavelNaoEncontradoException deupau){
        	System.out.println("Arquivo no existe: " + deupau.getId());
        }catch(FragmentoNaoArmazenadoException deupau){
        	System.out.println("Arquivo no armazenado: " + deupau.getId());
        }	
        
        
	    System.out.println("Finalizando......\n");
	        
    }

    
    public void run2(){
        MediaCenter media = new MediaCenter();
        
        media.addServidor(new ServidorBasico("horus", 1024, 0.5, 0.8));

        System.out.println(media);        
        
        
        Arquivo a1 = new Arquivo("A1");
        
        a1.addFragmento(new Fragmento("S1.1", 900));
        a1.addFragmento(new Fragmento("S1.2", 100));
        a1.addFragmento(new Fragmento("S1.3", 300));  

        try {
			System.out.println("Tempo de armazenamento de " + a1 + ": " + media.getTempoArmazenamento(a1) + "\n");
		} catch (ArquivoNaoArmazenadoException ex) {
			System.out.println("ERRO ARMAZENANDO ARQUIVO");
			ex.printStackTrace();
		}        
        
        System.out.println(media);        
        
    }
    
    public static void main(String[] args){
    		(new App()).run();
	}
    
    
}
