#pragma once

namespace nlite{



	///
	///コメントビュー設定
	///
	struct CommentViewProperty{

		
		enum CommentTimeType{
			WriteTimeType,
			StreamingTimeType

		};

	
	

	public:
		INT_PTR headerholSize[COMMENTVIEW_HEADERITEMSIZE];			//ヘッダ横サイズ
		INT_PTR headerOrderArray[COMMENTVIEW_HEADERITEMSIZE];		//ヘッダ並び順配列
		BOOL commentFoldingFlag;									//コメント折りたたみフラグ
		UINT_PTR commentTimeType;									//コメント時間表示タイプ
		COLORREF backColor;											//基底の背景色
		COLORREF selectBackColor;									//選択時の背景色
		COLORREF selectSellLineColor;								//選択時の枠線
		COLORREF normalSellLineColor;								//通常時の枠線
		COLORREF baseStringColor;									//基底の文字色
		COLORREF ownerStringColor;									//運営文字色
		COLORREF linkStringColor;									//基底のハイパーリンクの色
		COLORREF anonymousIDLinkColor;								//匿名ID表示色
		COLORREF colLineColor;										//項目の縦線


		///
		///コンストラクタ
		///
		CommentViewProperty();
	};

	///
	///コメント読み上げ設定
	///
	struct CommentReadProperty{

	public:

		BOOL commentReadFlag;								//コメント読み上げフラグ
		BOOL ngWordReadFlag;								//NGワード読み上げフラグ
		BOOL ngUserReadFlag;								//NGユーザー読み上げフラグ
		BOOL administratorCommentReadFlag;					//運営コメント読み上げフラグ
		BOOL bspReadFlag;									//バックステージパス読み上げフラグ
		BOOL userCommentReadFlag;							//ユーザーコメント読み上げフラグ
		BOOL teropReadFlag;									//テロップ読み上げフラグ
		BOOL newLineReadFlag;								//改行読み上げフラグ
		BOOL besideLengthFlag;								//読み上げサイズ決定フラグ
		UINT_PTR maxCommentLength;							//読み上げサイズ設定時の最大サイズ
		CNLiteString shortComment;							//省略時に読み上げる文字列
		CNLiteString outString;								//読み上げ除外文字列
		
		///
		///コンストラクタ
		///
		CommentReadProperty();
	};

	///
	///一般設定
	///
	struct GeneralProperty{

	public:
		CNLiteString browserPath;					//ブラウザのパス
		BOOL userCountUpdateFlag;					//来場者数を更新するかのフラグ
		BOOL commentLogAutoSaveFlag;				//コメント自動保存用のフラグ
		CNLiteString commentPath;					//コメントログ保存場所
		BOOL defaultBrowserFlag;					//リンクを開く際に基底のブラウザを使用するかのフラグ
		BOOL autoNameRegisterFlag;					//ユーザ名自動登録フラグ
		BOOL autoNameUpdateFlag;					//更新して自動登録するフラグ
		BOOL numberNameFlag;						//数字のみの名前を許可するかのフラグ
		BOOL  autoColorRegisterFlag;				//名前登録持に色を自動的に指定するかのフラグ
		BOOL activeCountTimeFlag;					//アクティブ人数を自動更新するかのフラグ
		BROWSERTYPE browserType;					//ブラウザタイプ
		BOOL ncvUserSettingReadedFlag;				//ncvリスナーデータ読み込み済みフラグ
		

		///
		///コンストラクタ
		///
		GeneralProperty();
		
	};
	

	///
	///メイン設定
	///
	struct MainFrameProperty{


	public:

		SIZE windowSize;							//ウィンドウサイズ
		BOOL windowFrontFlag;						//ウィンドウ最前面表示フラグ


		///
		///コンストラクタ
		///
		MainFrameProperty();
		
		

	};

	///
	///nlite設定
	///
	struct Property{

	public:
		CommentViewProperty cvp;					//コメントビュープロパティ
		MainFrameProperty mfp;						//メインウィンドウプロパティ
		GeneralProperty gp;							//共有プロパティ
		CommentReadProperty crp;					//コメント読み上げプロパティ
		CNLiteString appLocalPath;					//ローカルフォルダパス
		CNLiteString propertyFolderPath;			//プロパティ配置が記載されたフォルダ
		CNLiteString propertySaveFolderPath;		//プロパティデータ保存先フォルダ
		CNLiteString propertyPath;					//プロパティファイルパス
		CNLiteString listenerDataPath;				//リスナー情報設定ファイルパス
		Property();

		~Property();

		

	private:
		VOID CreatePropertyFile();

	public:
		VOID Initialize();

		VOID ReadProperty();


		VOID WriteProperty();

		BROWSERTYPE CookieSetting();

		

	};


	///
	///設定ファイルのxml読み取り用クラス
	///
	class ReadPropertyXML:public CXmlParser{

	private:

		Property &nliteProperty;

		struct Node{

			enum type{
				None,
				CommentReadProperty,
				CommentViewProperty,
				MainFrameProperty,
				GeneralProperty
			};
		};

		
		Node::type propertyType;			//プロパティのタイプ
		tstring nodeName;					//ノード名



	public:
		///
		///コンストラクタ
		///
		ReadPropertyXML(Property &in_property);



		void OnStartElement (const XML_Char *pszName, const XML_Char **papszAttrs);

		void OnEndElement (const XML_Char *pszName);

		void OnCharacterData (const XML_Char *pszData, int nLength);
	};


	


}