// Gestione parametri ditta MRP

#ifndef __CONFAPP_H
#include <confapp.h>
#endif

#include "mrplib.h"
#include "mr0400.h"

#define NTURNI    8

class TConf_MRP_mask : public TCalendar_mask
{
protected:
  virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);

public:
  TConf_MRP_mask(const char* name, int num = 0);
  virtual ~TConf_MRP_mask();
};

bool TConf_MRP_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
  switch (o.dlg())
  {
    case F_YEAR:
      if (e == fe_init || e == fe_modify)
        update_calendar(F_CALENDAR, F_YEAR);
      break;
    default:
      break;
  }
  return TRUE;
}

TConf_MRP_mask::TConf_MRP_mask(const char* name, int num)
         : TCalendar_mask(name, num)
{
  set_handlers();
}

TConf_MRP_mask::~TConf_MRP_mask()
{
}

//////////////////////////////////////////////////
// TConf_MRP_application
//////////////////////////////////////////////////
class TConf_MRP_application : public TConfig_application
{
  TConf_MRP_mask *_mask;

protected:
  virtual TMask* get_mask() { return _mask; }
  virtual TMask* create_mask(const TFilename& f) { if (_mask == NULL) _mask = new TConf_MRP_mask(f); return _mask;}
  virtual void   destroy_mask()                  { delete _mask; _mask = NULL; }  
public:

  virtual bool preprocess_config (TMask& mask, TConfig& config);
  virtual bool postprocess_config (TMask& mask, TConfig& config);
  virtual bool user_create();
  virtual bool user_destroy();

  TConf_MRP_application() : TConfig_application(CONFIG_DITTA) { _mask = NULL;}
  virtual ~TConf_MRP_application() {}
};

bool TConf_MRP_application::preprocess_config (TMask& mask, TConfig& c)
{
  TMRP_config& config=(TMRP_config&)c;
  for (int i = 0; i < NTURNI; i++)
  {
    const  short h = F_T1HINIZIO+(i*4);
    // inizio turno
    mask.set(h  , config.ora_inizio_turno(i)); // Hour...
    mask.set(h+1, config.min_inizio_turno(i)); // Minutes...
    // durata turno
    mask.set(h+2, config.ore_durata_turno(i));
    mask.set(h+3, config.min_durata_turno(i));
    mask.set(F_T1NUMPERS+i,config.numpers_turno(i));
  }
  // Carica il calendario
  ((TCalendar_mask&)mask).update_calendar(F_CALENDAR, F_YEAR);

  return TRUE;
}

bool TConf_MRP_application::postprocess_config (TMask& mask, TConfig& c)
{
  TMRP_config& config=(TMRP_config&)c;
  for (int i = 0; i < NTURNI; i++)
  {
    // Traduce le ore ed i minuti
    const short h = F_T1HINIZIO+(i*4);
    config.set_inizio_turno(i,mask.get_int(h)  ,mask.get_int(h+1));
    config.set_durata_turno(i,mask.get_int(h+2),mask.get_int(h+3));
    // numero di persone
    config.set_numpers_turno(i,mask.get_int(F_T1NUMPERS+i));
  }
  config.set_gestimpianti(mask.get_bool(F_GESTIMPIANTI));
  config.set_turni(mask.get_int(F_NTURNI));
  
  TString paragraph(config.get_paragraph());
  config.set_paragraph(""); // Akkrokkio per salvare il calendario...
  ((const TCalendar_mask&)mask).calendar().write();
  config.set_paragraph(paragraph); // re-read
  return TRUE;
}


bool TConf_MRP_application::user_create()
{
  TConfig conf(CONFIG_DITTA);
  conf.set( "EdMask", "mr0400a", "mr");
  return TRUE;
}

bool TConf_MRP_application::user_destroy()
{
  return TRUE;
}

int mr0400(int argc, char* argv[])
{
  TConf_MRP_application app;

  app.run(argc, argv, "Parametri gestione MRP");
  return 0;
}