package Virtual;

import Server.IniEditor;
import Database.Database;

import Manager.Room;

import java.net.*;
import java.io.*;

public class Connection {

    public ServerSocket Server1;
    public ServerSocket Server2;
    public Socket Client;
    public Database DB;
    public Comunication TH;
    public Room rm;

    public OutputStream co;
    public InputStream ci;

    public Thread thread;

    IniEditor read = new IniEditor();

    public Connection(){
         //licenza(); //Licenza LiveXenon Group
         reader(); //Legge config.ini
         DatabaseC(); //Connessione con Database MySQL
         ServerInfo(); //Crea il server INFO
         //ServerMus(); //Crea il server MUS
         InitializeHotel(); //Inizializza Hotel
         StartServer(); //AVVIA SERVER RICEZIONE
    }

    private void licenza(){
        try
           {
        URL url = new URL("http://livexenon.netsons.org/licenza.php");
        BufferedReader page = new BufferedReader(new InputStreamReader(url.openStream()));

        //System.out.println(page.readLine());

        if(!page.readLine().equals("1")){
        System.out.println("Non è possibile avviare il server!");
        System.exit(0);
        }
           }catch(IOException re)
           {
            System.out.println("Non è possibile avviare il server!");
        System.exit(0);
           }
    }

    private void reader(){
       try
           {
             read.load("config.ini");
           }
       catch(IOException re)
           {
            System.out.println("Errore INI: " + re);
            System.exit(0);
           }
    }
    private void ServerInfo(){

        try
          {
              Server1 = new ServerSocket(Integer.parseInt(read.get("porte", "infoport")));
          }
              catch (IOException ex)
          {

              System.out.println("Errore Server: " + ex);
              System.exit(0);
              
          }
              System.out.println("->" + "Server PRINCIPALE in attesa di connessioni sulla porta " + read.get("porte", "infoport") + "!");
              
        
    }

     private void ServerMus(){

        try
          {
              Server2 = new ServerSocket(Integer.parseInt(read.get("porte", "musport")));
          }
              catch (IOException ex)
          {

              System.out.println("Errore Server: " + ex);
              System.exit(0);

          }
              System.out.println("->" + "Server SECONDARIO in attesa di connessioni sulla porta " + read.get("porte", "musport") + "!");


    }

    private void DatabaseC(){

         DB = new Database(read.get("mysql", "dbname"),read.get("mysql", "username"),read.get("mysql", "password")); // DATABASE, USERNAME, PASSWORD

    }

    private void InitializeHotel(){
        DB.Update("UPDATE rooms SET users_active = '0' WHERE users_active > '0'");
    }
        
    //Inizio Server
    public void StartServer(){

    TH = new Comunication();
    rm = new Room(DB, TH);
    
        while (!Server1.isClosed())
        {
            try
               {
                        Client = Server1.accept();
                        System.out.println("Client connesso " + Client.getInetAddress());
                        thread = new Thread(new VirtualServer(Client,DB,TH,thread,rm,Server1));
                        thread.start();
                   
               }
                    catch (IOException ac)
               {
                    System.out.println("Errore Accesso: " + ac);
               }
        }

    }


}
