#pragma once
#include "normalresponse.h"

class CDirectoryResponse :
	public CNormalResponse
{
public:
	CDirectoryResponse(CServer *server,CConfigAccess context,CRequest request,CAlias alias);
	virtual ~CDirectoryResponse(void);

	virtual void PreCreateResponse() {};				//	1:レスポンス生成準備		
	virtual void SetNextData(CBuffer &data) {};		//	2:受信データの設定(繰り返し)
	virtual void CreateResponse();					//	3:レスポンスの生成
	virtual __int64 GetResponseSize();				//	4:レスポンスサイズの取得
//	virtual CConfigAccess GetResponseInfo();		//	5:レスポンス情報を取得
	virtual int GetNextData(CBuffer &data);			//	6:レスポンスの取得

protected:
	class CFileItem
	{
	public:
		int			m_sortMode;
		CString		m_name;
		CTime		m_lastUpdate;
		__int64		m_size;

		CFileItem() {m_sortMode = 0;};
		int operator > (CFileItem &other)
		{
			switch(m_sortMode)
			{
			case 1:
				return m_lastUpdate > other.m_lastUpdate;
			case 2:
				return m_size > other.m_size;
			default:
				return m_name > other.m_name;
			}
		};
	};

	typedef CSortArray<CFileItem,CFileItem&>	CFileItemArray;

private:
	CHtmlLoader		m_body;
	int				m_done;

	int GetLinkList(CFileItemArray & list, int sortMode=-1);		//	リンクリストの取得
	int GetDirectoryList(CFileItemArray & list, int sortMode=-1);	//	ディレクトリリストの取得
	int GetFileList(CFileItemArray & list, int sortMode=-1);		//	ファイルリストの取得
	CTime GetTargetDate();											//	ディレクトリの作成時間の取得
};
