
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include "Logica_Robot.h"
#include "Comunicacio_Robot.h"
#include "Servidor_Xmlrpc_Mart.h"
#include "Interficie_Mart.h"
#include "Simulador_Mart.h"

Comunicacio_Robot *interficie_robot;
Simulador_Mart *simulador_mart;
Thread_Simulador_Mart *thread_simulador;
Thread_Servidor_Mart *thread_servidor;
Visualitzador_Mart *visor_mart;
Logica_Robot *logica_robot;

int main(int argc, char* argv[])
{
   int port_mart, port_terra;
   char *ip_terra;
   
   /*if (argc != 5) {
      std::cerr << "\nUs: SI1_MarsRovers_Mart <ip_servidor_terra> <port_servidor_terra> <port_servidor_mart> <fitxer_ini>\n\n";
      exit(1);
   }*/
   try {
      char nom_fitxer[11] = "config.ini";
      std::ifstream fitxer_ini(nom_fitxer,std::ios::in);
      //std::ifstream fitxer_dades(nom_fitxer_actual,std::ios::in);
      char ip[20];
      fitxer_ini >> ip;
      fitxer_ini >> port_terra;
      fitxer_ini >> port_mart;
      fitxer_ini.close();
      std::cout << "Port_terra: " << port_terra << "\n";
      std::cout << "Port_mart: " << port_mart << "\n";
      ip_terra = (char *)malloc(sizeof(char) * strlen(ip));
      strcpy(ip_terra,ip);
      simulador_mart = new Simulador_Mart();
      int error = simulador_mart -> inicialitzar_mapa_mart(nom_fitxer);//argv[4]);
      if (!error) {
         thread_simulador = new Thread_Simulador_Mart();
         thread_simulador -> start();

         visor_mart = new Visualitzador_Mart();
         logica_robot = new Logica_Robot();

         interficie_robot = new Comunicacio_Robot(logica_robot);
         interficie_robot -> establir_dades_inicials(ip_terra, port_terra);

         thread_servidor = new Thread_Servidor_Mart(port_mart);

         thread_servidor -> start();
         visor_mart -> iniciar_visualitzacio(argc,argv);    

      }
      else {
         std::cout << "\nError en la inicialitzacio dels mapes de part a partir del fitxer " 
                   << "mapes.ini" << "\n";
      }
   }
   catch (std::exception e) {
      std::cout << e.what(); 
   }   
}


