// Config.cpp : implementation file
//

#include "stdafx.h"
#include "Config.h"
//#include "lstentry.h"
#include "Registry.h"

//
// Settings for autodial
//
#define RAS_AUTODIAL_OPT_NONE           0x00000000  // No options
#define RAS_AUTODIAL_OPT_NEVER          0x00000001  // Never Autodial
#define RAS_AUTODIAL_OPT_ALWAYS         0x00000002  // Autodial regardless
#define RAS_AUTODIAL_OPT_DEMAND         0x00000004  // Autodial on demand
#define RAS_AUTODIAL_OPT_NOPROMPT       0x00000010  // Dial without prompting


DWORD gWizardSuccess = 0x00000000;
DWORD gWizardFailure = 0x00000001;
DWORD gWizardCancelled = 0x00000002;
DWORD gNewInstall = 0x00000001;
DWORD gUpdateSettings = 0x00000002;

DWORD gWizardResult;    // will be set to gWizardSuccess, gWizardFailure, or gWizardCancelled

const TCHAR c_szICSGeneral[] = _T("System\\CurrentControlSet\\Services\\ICSharing\\Settings\\General");

/* RMR TODO: reenable
void WriteDefaultConnectoidRegString ( LPTSTR lpszValue )
{
  DWORD dwAutodialOpt;

  //
  // Default to dial on demand, no prompting
  //
  dwAutodialOpt = (RAS_AUTODIAL_OPT_DEMAND | RAS_AUTODIAL_OPT_NOPROMPT);

  RnaSetDefaultAutodialConnection(lpszValue, dwAutodialOpt);
}

void ReadDefaultConnectoidString ( LPTSTR lpszValue, DWORD dwSize )
{
  DWORD dwAutodialOpt;

  //
  // Read the default autodial setting 
  //

 RnaGetDefaultAutodialConnection((PUCHAR) lpszValue, dwSize, &dwAutodialOpt);
}
*/


/////////////////////////////////////////////////////////////////////////////
// CConfig

CConfig::CConfig()
{
    m_EnableICS = TRUE;
    m_ShowTrayIcon = TRUE;
    m_nServers = 0;
    m_nDhcp = 0;
    m_nBlockOut = 0;
    m_nParams = 0;
    m_nGeneral = 0;

    m_OldExternalAdapterReg[0] = '\0';
    m_OldInternalAdapterReg[0] = '\0';
    m_OldDialupEntry[0] = '\0';

    m_bOldEnableICS = FALSE;

}

CConfig::~CConfig()
{
}



/////////////////////////////////////////////////////////////////////////////
// CConfig message handlers


int CConfig::SaveConfig()
{
    BOOL bBindingsNeeded = FALSE;
    BOOL bICSEnableToggled = FALSE;

    // check to see if a rebind is necessary
    if ( StrCmp ( m_OldExternalAdapterReg, m_ExternalAdapterReg ) != 0 )
        bBindingsNeeded = TRUE;
    if ( StrCmp( m_OldInternalAdapterReg, m_InternalAdapterReg ) != 0 )
        bBindingsNeeded = TRUE;

    // Save parameters in the [General] Section
    //

    CRegistry reg;
    reg.OpenKey(HKEY_LOCAL_MACHINE, c_szICSGeneral);

//  RMR TODO: REENABLE!!!
//    if ( _tcslen ( m_DialupEntry ) > 0 )
//        WriteDefaultConnectoidRegString ( m_DialupEntry );
    reg.SetStringValue(_T("HangupTimer"), m_HangupTimer);
    if (m_EnableDialOnDemand) 
        reg.SetStringValue(_T("DialOnDemand"), _T("1"));
    else 
        reg.SetStringValue(_T("DialOnDemand"), _T("0"));

    if (m_EnableDHCP) 
    {
        reg.SetStringValue(_T("EnableDHCP"), _T("1"));
    }
    else 
    {
        reg.SetStringValue(_T("EnableDHCP"), _T("0"));
    }

    if (m_ShowTrayIcon) 
        reg.SetStringValue(_T("ShowTrayIcon"), _T("1"));
    else 
        reg.SetStringValue(_T("ShowTrayIcon"), _T("0"));

    if (m_EnableICS) 
    {
        if ( !m_bOldEnableICS )
            bICSEnableToggled = TRUE;

        reg.SetStringValue(_T("Enabled"), _T("1"));
    }
    else 
    {
        if ( m_bOldEnableICS )
            bICSEnableToggled = TRUE;

        reg.SetStringValue(_T("Enabled"), _T("0"));
    }

    // Added for compatibility with Win98SE/legacy setup for now
    reg.SetStringValue(_T("RunWizard"), _T("0"));

    if ( bBindingsNeeded )
        return BINDINGS_NEEDED;
    else if ( bICSEnableToggled )
        return ICSENABLETOGGLED;
    else
        return SAVE_SUCCEDED;
    

}

void CConfig::WriteWizardCode( BOOL bWizardRun )
{
    CRegistry reg;
    reg.OpenKey(HKEY_LOCAL_MACHINE, c_szICSGeneral);
    reg.SetBinaryValue(_T("WizardStatus"), &gWizardResult, sizeof(gWizardResult) );
    if ( bWizardRun )
        reg.SetBinaryValue(_T("WizardOptions"), &gNewInstall, sizeof(gNewInstall) );
    else
        reg.SetBinaryValue(_T("WizardOptions"), &gUpdateSettings, sizeof(gUpdateSettings) );

}
/*
RMR TODO: REENABLE
void CConfig::LoadConfig()
{
    // Save parameters in the [General] Section
    //
     
    ReadGeneralRegString(_T("InternalAdapterReg"), m_InternalAdapterReg, MAX_STRLEN);
    ReadGeneralRegString(_T("ExternalAdapterReg"), m_ExternalAdapterReg, MAX_STRLEN);
//    ReadGeneralRegString(_T("DialupEntry"), m_DialupEntry, MAX_STRLEN);
    ReadDefaultConnectoidString ( m_DialupEntry, MAX_STRLEN );
    ReadGeneralRegString(_T("HangupTimer"), m_HangupTimer, MAX_STRLEN);

    TCHAR szBOOL[MAX_STRLEN];
    ReadGeneralRegString(_T("DialOnDemand"), szBOOL, MAX_STRLEN);
    if ( _tcscmp ( szBOOL, _T("1")) == 0 )
        m_EnableDialOnDemand = TRUE;
    else
        m_EnableDialOnDemand = FALSE;
    
    ReadGeneralRegString(_T("EnableDHCP"),szBOOL, MAX_STRLEN);
    if ( _tcscmp ( szBOOL, _T("1")) == 0 )
        m_EnableDHCP = TRUE;
    else
        m_EnableDHCP = FALSE;

    ReadGeneralRegString(_T("ShowTrayIcon"), szBOOL, MAX_STRLEN);
    if ( _tcscmp ( szBOOL, _T("1")) == 0 )
        m_ShowTrayIcon = TRUE;
    else
        m_ShowTrayIcon = FALSE;

    ReadGeneralRegString(_T("Enabled"), szBOOL, MAX_STRLEN);
    if ( _tcscmp ( szBOOL, _T("1")) == 0 )
        m_EnableICS = TRUE;
    else
        m_EnableICS = FALSE;


    // save these off to check against on a save
    _tcsncpy ( m_OldExternalAdapterReg, m_ExternalAdapterReg, MAX_STRLEN);
    _tcsncpy ( m_OldInternalAdapterReg, m_InternalAdapterReg, MAX_STRLEN);
    _tcsncpy ( m_OldDialupEntry, m_DialupEntry, MAX_STRLEN);

    m_bOldEnableICS = m_EnableICS;

}
*/
void CConfig::InitWizardResult() 
{ 
    gWizardResult = gWizardSuccess; 
}

void CConfig::WizardCancelled() 
{
    gWizardResult = gWizardCancelled;
}
void CConfig::WizardFailed() 
{
    gWizardResult = gWizardFailure;
}