#pragma once

#include <map>
#include "Less.h"


enum ESwitch
{
	// task switch
	SWITCH_TASK,
	// option switches
	SWITCH_OPTION_FILE,
	// migration switches
	SWITCH_TEST_MIGRATION,
	SWITCH_INTRA_FOREST,
	SWITCH_SOURCE_DOMAIN,
	SWITCH_SOURCE_OU,
	SWITCH_TARGET_DOMAIN,
	SWITCH_TARGET_OU,
	SWITCH_RENAME_OPTION,
	SWITCH_RENAME_PREFIX_OR_SUFFIX,
	SWITCH_PASSWORD_OPTION,
	SWITCH_PASSWORD_SERVER,
	SWITCH_PASSWORD_FILE,
	SWITCH_CONFLICT_OPTIONS,
	SWITCH_CONFLICT_PREFIX_OR_SUFFIX,
	SWITCH_USER_PROPERTIES_TO_EXCLUDE,
	SWITCH_GROUP_PROPERTIES_TO_EXCLUDE,
	SWITCH_COMPUTER_PROPERTIES_TO_EXCLUDE,
	// user migration switches
	SWITCH_DISABLE_OPTION,
	SWITCH_SOURCE_EXPIRATION,
	SWITCH_MIGRATE_SIDS,
	SWITCH_TRANSLATE_ROAMING_PROFILE,
	SWITCH_UPDATE_USER_RIGHTS,
	SWITCH_MIGRATE_GROUPS,
	SWITCH_UPDATE_PREVIOUSLY_MIGRATED_OBJECTS,
	SWITCH_FIX_GROUP_MEMBERSHIP,
	SWITCH_MIGRATE_SERVICE_ACCOUNTS,
	// group migration switches
//	SWITCH_MIGRATE_SIDS,
	SWITCH_UPDATE_GROUP_RIGHTS,
//	SWITCH_UPDATE_PREVIOUSLY_MIGRATED_OBJECTS,
//	SWITCH_FIX_GROUP_MEMBERSHIP,
	SWITCH_MIGRATE_MEMBERS,
//	SWITCH_DISABLE_OPTION,
//	SWITCH_SOURCE_EXPIRATION,
//	SWITCH_TRANSLATE_ROAMING_PROFILE,
	// computer migration switches
	SWITCH_TRANSLATION_OPTION,
	SWITCH_TRANSLATE_FILES_AND_FOLDERS,
	SWITCH_TRANSLATE_LOCAL_GROUPS,
	SWITCH_TRANSLATE_PRINTERS,
	SWITCH_TRANSLATE_REGISTRY,
	SWITCH_TRANSLATE_SHARES,
	SWITCH_TRANSLATE_USER_PROFILES,
	SWITCH_TRANSLATE_USER_RIGHTS,
	SWITCH_RESTART_DELAY,
	// security translation switches
//	SWITCH_TRANSLATION_OPTION,
//	SWITCH_TRANSLATE_FILES_AND_FOLDERS,
//	SWITCH_TRANSLATE_LOCAL_GROUPS,
//	SWITCH_TRANSLATE_PRINTERS,
//	SWITCH_TRANSLATE_REGISTRY,
//	SWITCH_TRANSLATE_SHARES,
//	SWITCH_TRANSLATE_USER_PROFILES,
//	SWITCH_TRANSLATE_USER_RIGHTS,
	SWITCH_SID_MAPPING_FILE,
	// service account enumeration switches
	// report generation
	SWITCH_REPORT_TYPE,
	SWITCH_REPORT_FOLDER,
	// include switches
	SWITCH_INCLUDE_NAME,
	SWITCH_INCLUDE_FILE,
	SWITCH_INCLUDE_DOMAIN,
	// exclude switches
	SWITCH_EXCLUDE_NAME,
	SWITCH_EXCLUDE_FILE,
	// key switches
	SWITCH_KEY_IDENTIFIER,
	SWITCH_KEY_FOLDER,
	SWITCH_KEY_PASSWORD,
	// help switch
	SWITCH_HELP,
};


//---------------------------------------------------------------------------
// Switch Map
//---------------------------------------------------------------------------


class CSwitchMap :
	public std::map<_bstr_t, int, StringIgnoreCaseLess>
{
public:

	CSwitchMap();

	int GetSwitch(LPCTSTR pszSwitch);
};