package octantKlient;



import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.util.Date;


public class Tcp {

    

    public static String spojTcp(String adresaOrientacnihoBodu, String adresaCile) throws InterruptedException {
   
        long startSpojeni = (new Date()).getTime();

        Socket klient = null;
        try {
            klient = new Socket(adresaOrientacnihoBodu, 49700);
            klient.setSoTimeout(10000);
      
        } catch (Exception e) {
            Log.zapisDoLogu(e);
            
            //pri prekroceni casu se nastavi hodnota NaN a pozdeji se tento uzel vymaze
            return "NaN";
        }
        //ulozi hodnot prichozi ze serveru
        BufferedReader hodnotaZeServeru = null;
        String vracenaHodnota = null;
        double vzdalenost1 = 0;
        double vzdalenost2 = 0;

        try {
            //prikaz co posilam na server - inicializuje
            DataOutputStream prikazNaServer = new DataOutputStream(klient.getOutputStream());
            //ulozi se vracene hodnota do bufferu - inicializace
            hodnotaZeServeru = new BufferedReader(new InputStreamReader(klient.getInputStream()));

            //prikaz co se posila na server
            String command = "vzdalenost " + adresaCile;
          //  System.out.println("Posilam prikaz " + pokus.toString());
            prikazNaServer.writeBytes(command + '\n');
            //odeslani prikazu
            prikazNaServer.flush();
            //vracena hodnota se ulozi do stringu
            vracenaHodnota = hodnotaZeServeru.readLine();
            //rozdeli prichozi hodnotu na dve a ulozi do pole
            String pomocnaVracenaHodnota[] = vracenaHodnota.split(" ");

            //pokud jsou vraceny dve nenulove hodnoty rozdeli se a ulozi do samostatnych promennych
            if (vracenaHodnota != null) {
                vzdalenost1 = Double.parseDouble(pomocnaVracenaHodnota[0]);
                vzdalenost2 = Double.parseDouble(pomocnaVracenaHodnota[1]);
                Log.zapisDoLogu("Vracena vzdalenost z "+ adresaOrientacnihoBodu + "je: " + vzdalenost1 + " km" + vzdalenost2 + " km");
                System.out.println("Vracena vzdalenost z "+ adresaOrientacnihoBodu + "je: " + vzdalenost1 + "km" + vzdalenost2 + "km");
            } else {
                long konecSpojeni = (new Date()).getTime();
                long dobaSpojeni = konecSpojeni - startSpojeni;
                Log.zapisDoLogu("Spojeni selhalo v case: " + dobaSpojeni + " ms");
                //pokud je vracena hodnota nulova tak se nastavi hodnota NaN a pozdeji se tento uzel vymaze
                return "NaN";
            }
            //uzavre se socket - spojeni
            klient.close();
        } catch (IOException e) {
            Log.zapisDoLogu(e);
        }
        //zapis casu
        long konecSpojeni1 = (new Date()).getTime();
        long dobaSpojeni1 = konecSpojeni1 - startSpojeni;
        Log.zapisDoLogu("Delka TCP spojeni  " + dobaSpojeni1 + " ms.");
        System.out.println("Delka TCP spojeni  " + dobaSpojeni1 + " ms.");
        return vracenaHodnota;
    }
        
    
}
