#pragma once

#include "Workspace.h"

/*!
	class CAlias

	パスの解析と情報の保持を行うクラス
*/
class CAlias
{
public:
	CAlias();
	CAlias(CString url,CString targetHost, CWorkspaceAccess serverSetting);
	virtual ~CAlias(void);

	////////////////////////////////////////////////////////////////////////////////////////////////
	//	内部移動を実行
	////////////////////////////////////////////////////////////////////////////////////////////////
	//!	内部移動（情報を置き換え）
	int InternalMove(CString file);


	////////////////////////////////////////////////////////////////////////////////////////////////
	//	パス設定に関する情報を取得
	////////////////////////////////////////////////////////////////////////////////////////////////
	//!	パス情報の取得
	CWorkspaceAccess GetPathInfo();

	//!	パス情報のOptions取得
	CWorkspaceAccess GetPathOptions();


	////////////////////////////////////////////////////////////////////////////////////////////////
	//	URLに関する情報を取得
	////////////////////////////////////////////////////////////////////////////////////////////////
	//!	ターゲットを取得
	CString GetTarget();

	//!	エクストラパスのターゲット
	CString GetExtraTarget();

	//!	エクストラパス
	CString GetExtraPath();

	//!	移動先を取得
	CString GetMoveTo();

	//!	ホストを取得
	CString GetTargetHost();

	//!	インデックスファイルを取得
	CString GetIndexFile();

	//!	移動の必要があるか取得
	int IsMove();

	//!	ディレクトリ？
	int IsDirectory();

	//!	存在するの？
	int IsExist();

	//!	隠しファイル？
	int IsHidden();

	//!	エクストラパスがあるのか？
	int	IsExtarExist();

	//!	indexファイルがある？
	int IsIndexExist();

	//!	エキストラパスを調べる
	int CheckExtraPath();



protected:
	////////////////////////////////////////////////////////////////////////////////////////////////
	//	内部処理
	////////////////////////////////////////////////////////////////////////////////////////////////
	//!	パス情報の処理
	void ParsePath(CString url);

	//!	パス情報検索
	CWorkspaceAccess FindPathInfo(CString url,CString targetHost);

	//!	ローカルパスに変換
	void FindTarget(CString url);

	//!	バーチャルホスト検索
	void FindVirtualHost(CString targetHost,CStringArray &nodeList);

	//!	一致するパスを検索
	void FindPath(CString url,CStringArray &allNode,CStringArray &nodeList);

	//!	インデックスファイルは？
	int CheckIndexFile();

protected:
	////////////////////////////////////////////////////////////////////////////////////////////////
	//	メンバ変数
	////////////////////////////////////////////////////////////////////////////////////////////////
	CWorkspaceAccess	m_serverSetting;	//	サーバ設定
	CWorkspaceAccess	m_pathSetting;		//	パス設定
	CWorkspaceAccess	m_indexSetting;		//	インデックス設定
	CWorkspaceAccess	m_pathInfo;			//	パス情報

	CString			m_originalUrl;		//	元のURL
	CString			m_usingUrl;			//	現在のURL
	CString			m_target;			//	ターゲット
	CString			m_extraTarget;		//	エクストラパス ターゲット
	CString			m_extraPath;		//	エクストラパス
	CString			m_moveTo;			//	移動先
	CString			m_targetHost;		//	ターゲットホスト
	CString			m_indexFile;		//	インデックスパス
	int				m_isMove;		//	移動する必要があり
	int				m_isDirectory;		//	ディレクトリ？
};
