#pragma once

#include <windows.h>

#include <vector>



//////////////////////////////////////////////////////////////////////////
#pragma pack(push)
#pragma pack(4)

#define MAX_PACKAGE_FILE_NAME_LENGTH	50
#define MAX_FILE_NAME_LENGTH	200

struct FilePatchInfoRecord
{
	char szFileName[MAX_FILE_NAME_LENGTH];	// (게임루트로부터의)서브폴더명+파일명
	char szPackageFileName[MAX_PACKAGE_FILE_NAME_LENGTH];	// 년월일_시분_nnn (확장자 ".zip" 제외)
	DWORD dwSize;
	DWORD dwCRC32;
	DWORD dwVersion;
	
	FilePatchInfoRecord()
	{
		szFileName[0] = '\0';
		szPackageFileName[0] = '\0';
		dwSize = 0;
		dwCRC32 = 0;
		dwVersion = 100;
	}
	
};


//////////////////////////////////////////////////////////////////////////

struct PTR_STRING
{
	char* m_pStr;
	
	PTR_STRING( char* p )
	{
		m_pStr = p;
	}
};


struct PTR_STRING_LESS
{
	bool operator()( const PTR_STRING ps1, const PTR_STRING ps2 ) const
	{
		return ( stricmp( ps1.m_pStr , ps2.m_pStr ) < 0 );
	}
};


//////////////////////////////////////////////////////////////////////////

class CPatchInfoList
{
public:
	bool Load( const char* szFileName );
	bool Save( const char* szFileName );
	
	void Reset();
	
	void SetVersion( DWORD dwVer )
	{
		m_dwVersion = dwVer;
	}
	
	DWORD GetVersion()
	{
		return m_dwVersion;
	}
	
	std::vector<FilePatchInfoRecord> &GetList()
	{
		return m_vecPatchInfo;
	}

	bool LoadV1( const char* szFileName );

	
protected:
	DWORD m_dwVersion;
	
	std::vector<FilePatchInfoRecord> m_vecPatchInfo;
	
	static const char* ms_cszHeaderString;
};


#pragma pack(pop)
