//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: 
//
//=============================================================================

#ifndef MODWIZARD_COPYFILES_H
#define MODWIZARD_COPYFILES_H
#ifdef _WIN32
#pragma once
#endif


#include <vgui_controls/WizardSubPanel.h>
#include <vgui_controls/Label.h>
#include <vgui_controls/ProgressBar.h>
#include "utlvector.h"
#include "configs.h"


// --------------------------------------------------------------------------------------------------------------------- //
// CreateModWizard sub panel 3.
// This panel asks for the directory to install in and the mod name.
// --------------------------------------------------------------------------------------------------------------------- //

namespace vgui
{

	class CModWizardSubPanel_CopyFiles : public WizardSubPanel
	{
	public:
		typedef WizardSubPanel BaseClass;

	public:
		CModWizardSubPanel_CopyFiles( Panel *parent, const char *panelName );

		// Called to store the settings it'll use to copy all the files over.
		void GetReady( const char *pOutputDirName, const char *pOutputModGamedirName, const char *modName ) ;
		
		virtual WizardSubPanel* GetNextSubPanel();
		virtual void OnDisplayAsNext();
		virtual void OnTick();


	protected:
		class CFileCopyInfo
		{
		public:
			CFileCopyInfo( const char *pIn, const char *pOut )
			{
				Q_strncpy( m_InFilename, pIn, sizeof( m_InFilename ) );
				Q_strncpy( m_OutFilename, pOut, sizeof( m_OutFilename ) );
			}

			char m_InFilename[MAX_PATH];
			char m_OutFilename[MAX_PATH];
		};

	protected:

		bool BuildCopyFiles_R( const char *pSourceDir, const char *pMask, const char *pOutputDirName );

		bool BuildCopyFilesForMappings( char **pMappings, int nMappings );
		bool HandleSpecialFileCopy( CFileCopyInfo *pInfo, bool &bErrorStatus );
		bool HandleReplacements_GenericVCProj( CFileCopyInfo *pInfo, bool &bErrorStatus );
		virtual bool BuildCopyFilesForMod_HL2() = 0;
		virtual bool BuildCopyFilesForMod_HL2MP() = 0;
		virtual bool BuildCopyFilesForMod_FromScratch() = 0;
		virtual bool BuildCopyFilesForMod_SourceCodeOnly() = 0;
		virtual bool HandleReplacements_GameProjectFiles( CFileCopyInfo *pInfo, bool &bErrorStatus ) = 0;
		virtual bool HandleReplacements_Solution( CFileCopyInfo *pInfo, bool &bErrorStatus ) = 0;
		// Right now only one of these files gets modified, but keeping it here for expansion in the future.
		virtual bool HandleReplacements_TemplateOptions( CFileCopyInfo *pInfo, bool &bErrorStatus ) = 0;

	protected:	

		CUtlVector<CFileCopyInfo> m_FileCopyInfos;
		int m_iCurCopyFile;	// -1 at the beginning.


		Label *m_pLabel;
		Label *m_pFinishedLabel;
		ProgressBar *m_pProgressBar;

		char m_OutputDirName[MAX_PATH];		// c:\mymod
		char m_OutModGamedirName[MAX_PATH];	// c:\mymod\mymod
		char m_ModName[MAX_PATH];			// mymod
		ModType_t m_ModType;
	};

	class CModWizardSubPanel_CopyFiles_Source2006 : public CModWizardSubPanel_CopyFiles
	{

	public:
		CModWizardSubPanel_CopyFiles_Source2006( Panel *parent, const char *panelName );

	private:

		bool BuildCopyFilesForMod_HL2();
		bool BuildCopyFilesForMod_HL2MP();
		bool BuildCopyFilesForMod_FromScratch();
		bool BuildCopyFilesForMod_SourceCodeOnly();
		bool HandleReplacements_GameProjectFiles( CFileCopyInfo *pInfo, bool &bErrorStatus );
		bool HandleReplacements_Solution( CFileCopyInfo *pInfo, bool &bErrorStatus );
		bool HandleReplacements_TemplateOptions( CFileCopyInfo *pInfo, bool &bErrorStatus ) { return false; } // Ep1 will never do this.

	};

	class CModWizardSubPanel_CopyFiles_Source2007 : public CModWizardSubPanel_CopyFiles
	{
	public:
		CModWizardSubPanel_CopyFiles_Source2007( Panel *parent, const char *panelName );

	private:

		bool BuildCopyFilesForMod_HL2();
		bool BuildCopyFilesForMod_HL2MP();
		bool BuildCopyFilesForMod_FromScratch();
		bool BuildCopyFilesForMod_SourceCodeOnly();
		bool HandleReplacements_GameProjectFiles( CFileCopyInfo *pInfo, bool &bErrorStatus );
		bool HandleReplacements_Solution( CFileCopyInfo *pInfo, bool &bErrorStatus );

		// Right now only one of these files gets modified, but keeping it here for expansion in the future.
		bool HandleReplacements_TemplateOptions( CFileCopyInfo *pInfo, bool &bErrorStatus );

	};

	class CModWizardSubPanel_CopyFiles_Source2009 : public CModWizardSubPanel_CopyFiles
	{
	public:
		CModWizardSubPanel_CopyFiles_Source2009( Panel *parent, const char *panelName );

	private:

		bool BuildCopyFilesForMod_HL2();
		bool BuildCopyFilesForMod_HL2MP();
		bool BuildCopyFilesForMod_FromScratch();
		bool BuildCopyFilesForMod_SourceCodeOnly();
		bool HandleReplacements_GameProjectFiles( CFileCopyInfo *pInfo, bool &bErrorStatus );
		bool HandleReplacements_Solution( CFileCopyInfo *pInfo, bool &bErrorStatus );

		// Right now only one of these files gets modified, but keeping it here for expansion in the future.
		bool HandleReplacements_TemplateOptions( CFileCopyInfo *pInfo, bool &bErrorStatus );

	};
}


#endif // MODWIZARD_COPYFILES_H