#include <config.h>
#include <execp.h>
#include <inst.h>
#include <tabutil.h>
#include "bainst.h"
#include "bainst00.h"

class TInstall_BA : public TInstallmodule_app
{
private:
  
protected:
  virtual bool modal() const {return TRUE;}
  virtual int module_number() const {return 0;}
  virtual bool install_firm() {return TRUE;} // no firm installation
  virtual bool install_com();
  virtual bool load_default_data() const ;
  virtual bool post_installer();
  virtual bool preload_mask();
  virtual bool some_to_load();

public:
  virtual ~TInstall_BA () {}
};

HIDDEN int search_edit(TConfig& cfg, void*)
{ 
  const TString16 module = cfg.get_paragraph().left(2); 
  TAssoc_array& var = cfg.list_variables(); 
  bool dirty = FALSE;
  FOR_EACH_ASSOC_STRING (var, obj, key, str)
  {
    const TFixed_string confr (key);
    if (confr.compare("Edit_", 5, TRUE) == 0)
    {
      if (module.compare(str, 2, TRUE) != 0)
      {
        cfg.remove(key);
        dirty = TRUE;
      }
    }
  }
  if (dirty)
  {
    cfg.set_paragraph("");
  }
  return FALSE;
}

bool TInstall_BA::post_installer()
{
  // configurazione provvisoria dei programmi gestori di tabelle
  if (!test_database())
  {
    TConfig prassis(CONFIG_STUDIO);
    const char *confapp="EdApp";
    const char *tabapp="TabPrg";
    // magazzino  
    prassis.set_paragraph("mg");
    prassis.set(tabapp,"mg0 -0");
    prassis.set(confapp,"mg0 -2 -1");
    // distinta base
    prassis.set_paragraph("db");
    prassis.set(tabapp,"db0 -0");
    prassis.set(confapp,"");
    // statistiche
    prassis.set_paragraph("sv");
    prassis.set(tabapp,"sv0 -0");
    prassis.set(confapp,"sv0 -3");
    // provvigioni
    prassis.set_paragraph("pr");
    prassis.set(tabapp,"pr0 -4");
    // MRP
    prassis.set_paragraph("mr");
    prassis.set(tabapp,"mr0 -0");
  }
  
  TConfig install ("install.ini");
  install.for_each_paragraph(search_edit, NULL);
  
  return TRUE;
}
 
bool TInstall_BA::some_to_load() 
{
  return _m->get_bool(F_TAB_CEE) || TInstallmodule_app::some_to_load();
}

bool TInstall_BA::preload_mask()
{
  if (!test_database())
  {
    _m->set(F_TAB_CEE," ");
    _m->disable(F_TAB_CEE);
  }
  else
  {
    TTable sce("%SCE");
    const bool empty = sce.first() != NOERR;
    
    if (empty)
      _m->set(F_TAB_CEE,"X");
  }
  return TInstallmodule_app::preload_mask();
}

bool TInstall_BA ::install_com() 
{
  bool ok=TRUE;
  TStd_filename txtfile;
  if (_m->get_bool(F_DEFAULTSDATA) && txtfile.check(TRUE,"lfiva.txt"))
  {
    TSystemisamfile tabcom(LF_TABCOM);
    tabcom.load((const char *)txtfile);
  }

  if (_m->get_bool(F_TAB_CEE) && txtfile.check(TRUE,"batbsce.txt"))
  {
    TSystemisamfile tabcom(LF_TABCOM);
    tabcom.load((const char *)txtfile);
  }
  return ok;
}

bool TInstall_BA ::load_default_data() const
{        
  TTable iva("%IVA");
  const bool empty = iva.first() != NOERR;
  
  return empty;
}

int bainst00(int argc, char** argv)
{ 
  TInstall_BA app;
  app.run(argc, argv);
  return 0;
}