#ifndef __WIZARD_H
#define __WIZARD_H

#include "utils.h"

///////////////////////////////////////////////////////////
// CampoWizardPage
///////////////////////////////////////////////////////////
class CampoWizardPage;  //predefinizione di CampoWizardPage (magia nera!!)
//predefinizione pure della CampoWizard con tutti i suoi metodi per poterlo usare nel metodo GetWizard (magia nerissima!!)
class CampoWizard : public wxWizard
{
  enum { m_nPages = 10 };  
  CampoWizardPage* m_pPage[m_nPages];

  wxString _strDestinationPath;       //path di aggiornamento/installazione
  InstallationType _uInstallationType;    //tipo di installazione selezionata (standard,server,client,aggiornamento)
  unsigned int _uDongleType;          //tipo di chiave di protezione (hardlock,eutron,server)

  wxString _strPrgLocPath;  //path programmi in locale
  wxString _strPrgNetPath;  //path programmi in remoto (server programmi directory per client)
  wxString _strDataPath;    //path dati (creare o usare)

  bool _bInstDemoData;      //installa dati dimostrativi
  bool _bInstDemoVersion;   //installa versione demo
  bool _bInstUseAuth;       //installa/usa server authoriz
  wxString _strSrvAuth;     //nome server authoriz
  bool _bInstUseDict;       //installa/usa server diction
  wxString _strSrvDict;     //nome server diction
  
  LurchMode _iSrvAutostartMode;  //tipologia di esecuzione dei server
  bool _bDesktopShortcut;   //crea il link sul desktop

protected:
  DECLARE_EVENT_TABLE();
  void OnNext(wxCommandEvent& e);

  int Pages() const { return m_nPages; }
  CampoWizardPage& Page(int p) const { wxASSERT(p >= 0 && p < m_nPages); return *m_pPage[p]; }
 
public:
  bool Run();
  wxString Get(wxWindowID id) const;
  int GetSelection(wxWindowID id) const;
  bool GetBool(wxWindowID id) const;
  void Set(wxWindowID id, const wxString str);
  void SetBool(wxWindowID id, bool bOk);

  //metodi per il passaggio tra le finestre dei parametri di installazione!
  void SetDestinationPath(const wxString& strPath);
  const wxString& GetDestinationPath() const;
  void SetInstallationType(const InstallationType uType);
  const InstallationType GetInstallationType() const;
  void SetDongleType(const unsigned int uType);
  const unsigned int GetDongleType() const;

  void SetPrgLocPath(const wxString& strPrgLocPath);
  const wxString& GetPrgLocPath() const;
  void SetPrgNetPath(const wxString& strPrgNetPath);
  const wxString& GetPrgNetPath() const;
  void SetDataPath(const wxString& strDataPath);
  const wxString& GetDataPath() const;

  void SetInstDemoData(const bool bInstDemoData);
  const bool GetInstDemoData() const;
  void SetInstDemoVersion(const bool bInstDemoVersion);
  const bool GetInstDemoVersion() const;

  void SetInstUseAuth(const bool bInstUseAuth);
  const bool GetInstUseAuth() const;
  void SetSrvAuth(const wxString& strSrvAuth);
  const wxString& GetSrvAuth() const;

  void SetInstUseDict(const bool bInstUseDict);
  const bool GetInstUseDict() const;
  void SetSrvDict(const wxString& strSrvDict);
  const wxString& GetSrvDict() const;

  void SetSrvAutostartMode(const LurchMode iSrvAutostartMode);
  const LurchMode GetSrvAutostartMode() const;

  void SetDesktopShortcut(const bool bDesktopShortcut);
  const bool GetDesktopShortcut() const;

  CampoWizard(wxWindow* pParent);
};

#endif