


#include "kubecontrol/KubePod.hpp"
#include "nlohmann/json_fwd.hpp"
#include <thread>
#define CATCH_CONFIG_MAIN
#include <catch2/catch.hpp>

#include <kubecontrol/PodController.hpp>
#include <crossguid/guid.hpp>


SCENARIO("Testing the SimCore Sensor")
{

  
kubecontrol::PodController podc("docs/config");
std::string name = "hamburg";

std::string uuid = name;
    kubecontrol::KubePod ShipPod1("controller",uuid,"ship","ship:latest","simulator");

    nlohmann::json vars;
    vars["ENTITY_ID"] = uuid;
    vars["ENTITY_NAME"] = "FGS Hamburg";
    vars["ENTITY_SIDE"] = "Neutral";
    vars["POSITION"]["LAT"] = "55";
    vars["POSITION"]["LON"] = "8";
    vars["POSITION"]["Height"] = "0";
    vars["COURSE"] = "0";
    vars["SPEED"] = "0";
    vars["GROUNDTRUTH_PORT"] = std::to_string(10000);
    vars["GROUNDTRUTH_ADDR"] = "239.0.0.1";
    vars["COMMAND_PORT"] = "5555";
    vars["ENTITY_RCS"] = std::to_string(850);

    vars["ENTITY_SENSORS"].push_back("radar:latest");
    ShipPod1.setEnvironmentVar("CONFIG", vars.dump());

// kubecontrol::KubePod pod1("Pod1",xg::newGuid().str(),"ship:latest");

// kubecontrol::KubePod pod2("Pod2",xg::newGuid().str(),"debugdebianhenry:0.1.3");

// pod2.setArgs("-c");
// pod2.setArgs("while true; do echo hello; sleep 5;done");

// pod2.setCommand("/bin/sh");
// podc.startPod(pod2);

LOG_S(INFO)<<"Starting";

podc.startPod(ShipPod1);
LOG_S(INFO)<<"started";

std::string info1 = "";
// info1 = podc.getInfoForPod("hamburg");
// nlohmann::json j1 = nlohmann::json::parse(info1);

std::this_thread::sleep_for(std::chrono::milliseconds(2000));
ShipPod1.updateInfoForThisPod(podc.getKubernetesAPI());
// podc.checkPodsHierarchy();
//  LOG_S(INFO)<<podc.PodList_.size();;
//       for(auto i:  podc.PodList_)
//       {
//         LOG_S(INFO)<< i.InfoPod.Uuid; 
//         LOG_S(INFO)<< i.InfoPod.ToString();  
 
//       }

// nlohmann::json jall = nlohmann::json::parse(podc.getPodsInfo());

  GIVEN("different Attributes for a Track in different forms")
  {
    WHEN("constructing Track Object with data")
    {
       
      THEN("check if Track attributes are correct")
      {
        auto info = podc.getInfoForPod(ShipPod1.getUUID());
        REQUIRE(info.UUID == ShipPod1.getUUID());
        REQUIRE(info.IP == ShipPod1.getIp());
        REQUIRE(info.Owner == ShipPod1.getOwner());
        REQUIRE(info.Component == ShipPod1.getComponent());

        LOG_S(INFO)<<"Stopping";
        std::this_thread::sleep_for(std::chrono::milliseconds(5000));
        podc.stopAllPods();
        // REQUIRE(info1 != "");
       




      } //THEN
    } // WHEN
  } // GIVEN
} //SCENARIO