/*
Program nacte hodnoty obalek, zmeri zpozdeni k cili a vypocita vzdalenost k cili (polomery mezikruzi)
 */
package octantserver;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;


/**
 *
 * @author Filip Dvorak
 */
public class OctantServer {

    /**
     * @param args the command arguments
     */
    public static void main(String[] args) {

        //1. nejprve nacte IP adresu cile
        //2. provede se ping na cilovou IP adresu a ziska se minimalni hodnota zpozdeni
        //3. vyhleda se odpovidajici primka pro vypocet pomeru cas/vzdalenost
        //4. pomoci teto primky (hledanaPrimka) se vypocita vzdalenost 
        //5. hodnoty jsou vypsany na vystup

         //program je ted urcen pro TEST na lokalnim pocitaci s napevno zadanou IP adresou
        // v pripade nasazeni na server je nutno odkomentovat radek pod slovem SERVER
        // a zakomentovat radek pod slovem TEST
        
        
       //smazani log souboru
        Log.smazSouborLog();
        Log.zapisDoLogu("Log smazan");
        
        // nacteni obalek ze souboru
        BufferedReader bufferHorni = null;
        BufferedReader bufferSpodni = null;
        //nacteni souboru
        try {
             //pro test na SERVERU
             //bufferHorni = new BufferedReader(new FileReader("/home/cesnet_vutbr2/xdvora02/obalkaHorni.txt"));
             //bufferSpodni = new BufferedReader(new FileReader("/home/cesnet_vutbr2/xdvora02/obalkaDolni.txt"));
            
            //TEST na lokalnim PC   
            bufferHorni = new BufferedReader(new FileReader("obalkaHorni.txt"));
            bufferSpodni = new BufferedReader(new FileReader("obalkaDolni.txt"));
        } catch (FileNotFoundException ex) {
            //System.out.println("Soubor s obalkou nenalezen");
            Log.zapisDoLogu("Soubor s obalkou nenalezen");
        }



        //fce nacte hodnoty - primky ze souboru
        ArrayList<Primka> obalkaHorni = Vypocty.nacteniZeSouboruProObalkuHorni(bufferHorni);
        ArrayList<Primka> obalkaSpodni = Vypocty.nacteniZeSouboruProObalkuSpodni(bufferSpodni);


        // nacte zadanou IP adresu cile ze vstupniho parametru - pro test na SERVER
        //String IPadresaCile = args[0];
        //pro TEST na lokalnim pC - IP adresa je napvno zadana
        String IPadresaCile ="195.113.161.82";

        //spusti ping na IP adresu cile
        Double casPing = null;
        try {
            casPing = Ping.ping(IPadresaCile);
        } catch (IOException ex) {
            //System.out.println("Selhal ping na cilovy uzel")
            Log.zapisDoLogu("Selhal ping na cilovy uzel");
        }

        //PRO HORNI OBALKU
        //hleda vhodnou primku pro dane minimalni zpozdeni  -- teto primky bude pozdeji vyuzito pri ziskavani pomeru vzd/zpozdeni
        Primka hledanaPrimkaHorni = Vypocty.najdiPrimku(obalkaHorni, casPing);
        //fce na prepocet casu (ziskaneho pingu k cili) na vzdalenost k cili
        Double vzdalenostHorni = Vypocty.najdiVzdalenost(hledanaPrimkaHorni, casPing);



        //PRO SPODNI OBALKU
        //Primka hledanaPrimkaSpodni = Vypocty.najdiPrimku(obalkaSpodni, casPing);
        Primka hledanaPrimkaSpodni = Vypocty.najdiPrimkuDolni(obalkaSpodni, vzdalenostHorni);
        Double vzdalenostSpodni = Vypocty.najdiVzdalenost(hledanaPrimkaSpodni, casPing);


        //podminky zda byla hledanaPrimka nalezena -- pokud ne tak nasleduje zapis do logu
        if (hledanaPrimkaHorni == null) {
            // System.out.println("Primka horni nenalezena");
            Log.zapisDoLogu("Primka horni nenalezena");
        }

        if (hledanaPrimkaSpodni == null) {
            //System.out.println("Primka spodni nenalezena");
            Log.zapisDoLogu("Primka dolni nenalezena");
        }


        //System.out.println("Ping" + casPing);
        Log.zapisDoLogu("Ping k cili " + casPing + "ms");
        //System.out.println("vzdalenostHorni" + vzdalenostHorni);
        Log.zapisDoLogu("vzdalenostHorni " + vzdalenostHorni);
        Log.zapisDoLogu("vzdalenostSpodni " + vzdalenostSpodni);

        //vypis hledanych hodnot
        if (vzdalenostHorni != 0.0 || vzdalenostSpodni != 0.0) {
            System.out.println(vzdalenostHorni + " " + vzdalenostSpodni);
        }

    }
}
