#include "helpers.h"

#include <dummies/AcuDummy.h>
#include <dummies/BpxDummy.h>
#include <dummies/ComCookieDummy.h>
#include <dummies/ComIFDummy.h>
#include <dummies/CoreControllerDummy.h>
#include <dummies/GyroAdisDummy.h>
#include <dummies/GyroL3GD20Dummy.h>
#include <dummies/ImtqDummy.h>
#include <dummies/MgmLIS3MDLDummy.h>
#include <dummies/MgmRm3100Dummy.h>
#include <dummies/P60DockDummy.h>
#include <dummies/PduDummy.h>
#include <dummies/PlPcduDummy.h>
#include <dummies/RwDummy.h>
#include <dummies/SaDeploymentDummy.h>
#include <dummies/StarTrackerDummy.h>
#include <dummies/SusDummy.h>
#include <dummies/SyrlinksDummy.h>
#include <dummies/TemperatureSensorsDummy.h>
#include <mission/system/objects/CamSwitcher.h>

using namespace dummy;

void dummy::createDummies(DummyCfg cfg, PowerSwitchIF& pwrSwitch) {
  new ComIFDummy(objects::DUMMY_COM_IF);
  ComCookieDummy* comCookieDummy = new ComCookieDummy();
  new BpxDummy(objects::BPX_BATT_HANDLER, objects::DUMMY_COM_IF, comCookieDummy);
  if (cfg.addCoreCtrlCfg) {
    new CoreControllerDummy(objects::CORE_CONTROLLER);
  }
  if (cfg.addRtdComIFDummy) {
    new ComIFDummy(objects::SPI_RTD_COM_IF);
  }
  new RwDummy(objects::RW1, objects::DUMMY_COM_IF, comCookieDummy);
  new RwDummy(objects::RW2, objects::DUMMY_COM_IF, comCookieDummy);
  new RwDummy(objects::RW3, objects::DUMMY_COM_IF, comCookieDummy);
  new RwDummy(objects::RW4, objects::DUMMY_COM_IF, comCookieDummy);
  new SaDeplDummy(objects::SOLAR_ARRAY_DEPL_HANDLER);
  new StarTrackerDummy(objects::STAR_TRACKER, objects::DUMMY_COM_IF, comCookieDummy);
  if (cfg.addSyrlinksDummies) {
    new SyrlinksDummy(objects::SYRLINKS_HK_HANDLER, objects::DUMMY_COM_IF, comCookieDummy);
  }
  new ImtqDummy(objects::IMTQ_HANDLER, objects::DUMMY_COM_IF, comCookieDummy);
  if (cfg.addPowerDummies) {
    new AcuDummy(objects::ACU_HANDLER, objects::DUMMY_COM_IF, comCookieDummy);
    new PduDummy(objects::PDU1_HANDLER, objects::DUMMY_COM_IF, comCookieDummy);
    new PduDummy(objects::PDU2_HANDLER, objects::DUMMY_COM_IF, comCookieDummy);
    new P60DockDummy(objects::P60DOCK_HANDLER, objects::DUMMY_COM_IF, comCookieDummy);
  }

  if (cfg.addAcsBoardDummies) {
    new GyroAdisDummy(objects::GYRO_0_ADIS_HANDLER, objects::DUMMY_COM_IF, comCookieDummy);
    new GyroL3GD20Dummy(objects::GYRO_1_L3G_HANDLER, objects::DUMMY_COM_IF, comCookieDummy);
    new GyroAdisDummy(objects::GYRO_2_ADIS_HANDLER, objects::DUMMY_COM_IF, comCookieDummy);
    new GyroL3GD20Dummy(objects::GYRO_3_L3G_HANDLER, objects::DUMMY_COM_IF, comCookieDummy);
    new MgmLIS3MDLDummy(objects::MGM_0_LIS3_HANDLER, objects::DUMMY_COM_IF, comCookieDummy);
    new MgmLIS3MDLDummy(objects::MGM_2_LIS3_HANDLER, objects::DUMMY_COM_IF, comCookieDummy);
    new MgmRm3100Dummy(objects::MGM_1_RM3100_HANDLER, objects::DUMMY_COM_IF, comCookieDummy);
    new MgmRm3100Dummy(objects::MGM_3_RM3100_HANDLER, objects::DUMMY_COM_IF, comCookieDummy);
  }

  if (cfg.addSusDummies) {
    new SusDummy();
  }

  if (cfg.addTempSensorDummies) {
    new TemperatureSensorsDummy();
  }
  new CamSwitcher(objects::CAM_SWITCHER, pwrSwitch, power::NO_SWITCH);
  new PlPcduDummy(objects::PLPCDU_HANDLER, objects::DUMMY_COM_IF, comCookieDummy);
}