#include "StdAfx.h"
#include "nlib_include.h"




#define DECLARE_NLIB_ERROR_MESSAGE(c,m)\
	static const LPCTSTR ERROR_##c##MESSAGE = m


//NLIB_ERR_OK
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_OK,TEXT("エラーは発生していません"));

//NLIB_ERR_COOKIE_FAILED
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_COOKIE_FAILED,TEXT("クッキー取得に失敗しました"));

//NLIB_INITALIZE_FAILED_NETWORK
DECLARE_NLIB_ERROR_MESSAGE(NLIB_INITALIZE_FAILED_NETWORK,TEXT("ネットワークの初期化に失敗しました"));		

//NLIB_LIVENO_IS_NULL
DECLARE_NLIB_ERROR_MESSAGE(NLIB_LIVENO_IS_NULL,TEXT("入力された放送番号がNULL値です"));

//NLIB_LIVENO_FAILED_TOOBIG
DECLARE_NLIB_ERROR_MESSAGE(NLIB_LIVENO_FAILED_TOOBIG,TEXT("入力された放送番号が長すぎます"));

//NLIB_LIVENO_FAILED_UNDEFEINE
DECLARE_NLIB_ERROR_MESSAGE(NLIB_LIVENO_FAILED_UNDEFEINE,TEXT("入力された放送番号が正しくありません"));	

//NLIB_USERSESSION_FAILED_TOOBIG
DECLARE_NLIB_ERROR_MESSAGE(NLIB_USERSESSION_FAILED_TOOBIG,TEXT("ユーザーセッションの文字列が長すぎます"));

//NLIB_FAILED_CONNECT
DECLARE_NLIB_ERROR_MESSAGE(NLIB_FAILED_CONNECT,TEXT("サーバーへの接続に失敗しました"));

//NLIB_ERR_GETPLAYERSTATUS_INVALID_LV
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_GETPLAYERSTATUS_INVALID_LV,TEXT("無効な放送番号です"));

//NLIB_ERR_GETPLAYERSTATUS_INVALID_THREAD
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_GETPLAYERSTATUS_INVALID_THREAD,TEXT("放送スレッドが見つかりませんでした"));

//NLIB_ERR_GETPLAYERSTATUS_CLOSED
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_GETPLAYERSTATUS_CLOSED,TEXT("放送が終了しています"));

//NLIB_ERR_GETPLAYERSTATUS_UNKNOWN_ERROR
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_GETPLAYERSTATUS_UNKNOWN_ERROR,TEXT("放送接続中に不明なエラーが発生しました:unknown_error"));

//NLIB_ERR_GETPLAYERSTATUS_SERVER_ERROR
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_GETPLAYERSTATUS_SERVER_ERROR,TEXT("放送サーバー接続に失敗しました"));

//NLIB_ERR_GETPLAYERSTATUS_DELETED
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_GETPLAYERSTATUS_DELETED,TEXT("放送が削除されています"));

//NLIB_ERR_GETPLAYERSTATUS_FULL
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_GETPLAYERSTATUS_FULL,TEXT("満員のため接続できませんでした"));

//NLIB_ERR_GETPLAYERSTATUS_PERMISSION_DENIED
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_GETPLAYERSTATUS_PERMISSION_DENIED,TEXT("放送に接続する権限がありません"));

//NLIB_ERR_GETPLAYERSTATUS_ACCESS_LOCKED
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_GETPLAYERSTATUS_ACCESS_LOCKED,TEXT("放送がロックされていて接続できません"));

//NLIB_ERR_GETPLAYERSTATUS_REQUIRE_COMMUNITY_MEMBER
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_GETPLAYERSTATUS_REQUIRE_COMMUNITY_MEMBER,TEXT("コミュニティ限定放送のため接続できませんでした"));

//NLIB_ERR_GETPLAYERSTATUS_COMINGSOON
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_GETPLAYERSTATUS_COMINGSOON,TEXT("放送が開場されていないため接続できませんでした"));

//NLIB_ERR_GETPLAYERSTATUS_NOTFOUND
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_GETPLAYERSTATUS_NOTFOUND,TEXT("放送が見つかりませんでした"));

//NLIB_ERR_GETPLAYERSTATUS_NOTLOGIN
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_GETPLAYERSTATUS_NOTLOGIN,TEXT("ログインしていないため放送に接続できません"));

//NLIB_ERR_GETPLAYERSTATUS_UNKNOWN
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_GETPLAYERSTATUS_UNKNOWN,TEXT("放送接続中に不明なエラーが発生しました:unknown"));

//NLIB_ERR_GETPLAYERSTATUS_MAINTENANCE
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_GETPLAYERSTATUS_MAINTENANCE,TEXT("メンテナンス中です"));

//NLIB_ERR_GETPLAYERSTATUS_NOT_PERMITTED
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_GETPLAYERSTATUS_NOT_PERMITTED,TEXT("終了した放送か、古い放送、あるいはBANされています"));

//NLIB_ERR_GETPLAYERSTATUS_REQUIRE_ACCEPT_PRINT_TIMESHIFT_TICKET
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_GETPLAYERSTATUS_REQUIRE_ACCEPT_PRINT_TIMESHIFT_TICKET,TEXT("タイムシフトの視聴権利がありません"));

//NLIB_ERR_GETPLAYERSTATUS_TSARCHIVE
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_GETPLAYERSTATUS_TSARCHIVE,TEXT("有料放送のアーカイブ視聴権利がないため接続できませんでした"));

//NLIB_ERR_GETPLAYERSTATUS_USERTIMESHIFT
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_GETPLAYERSTATUS_USERTIMESHIFT,TEXT("コミュニティに参加していないためタイムシフトを視聴することができません"));

//NLIB_ERR_GETPLAYERSTATUS_UNDEFINED
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_GETPLAYERSTATUS_UNDEFINED,TEXT("アプリケーション内で定義されてないエラーが発生しました"));

//NLIB_ERR_WATCHLIVENICOVIDEO_FAILED_CONNECT
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_WATCHLIVENICOVIDEO_FAILED_CONNECT,TEXT("ニコ生のサーバー接続に失敗しました"));

//NLIB_ERR_BUFFER_TOOLITTLE
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_BUFFER_TOOLITTLE,TEXT("内部で確保されたバッファが足りません"));

//NLIB_ERR_FAILED_NETWORK
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_FAILED_NETWORK,TEXT("ネットワークに何らかの異常が発生しました"));

//NLIB_ERR_PLAYERSTATUS_ERROR
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_PLAYERSTATUS_ERROR,TEXT("取得したプレイヤーステータスがエラーです"));

//NLIB_ERR_HEARTBEAT_ERROR
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_HEARTBEAT_ERROR,TEXT("取得したハートビートがエラーです"));

//NLIB_ERR_JSON_PARSE
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_JSON_PARSE,TEXT("json解析中にエラーが発生しました"));

//NLIB_ERR_SHELL_FAILED
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_SHELL_FAILED,TEXT("shellコマンド実行に失敗しました"));

//NLIB_ERR_NOT_LIVECONNECT
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_NOT_LIVECONNECT,TEXT("生放送に接続していません"));

//NLIB_ERR_LIVE_GETPOSTKEY_FAILED
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_LIVE_GETPOSTKEY_FAILED,TEXT("コメント送信用のポストキー取得に失敗しました"));

//NLIB_ERR_GETPLAYERSTATUS_NOAUTH
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_GETPLAYERSTATUS_NOAUTH,TEXT("放送接続が許可されていません"));

//NLIB_ERR_CODE_NOTSET
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_CODE_NOTSET,TEXT("エラーコードが設定されていません。ライブラリの実装に何らかの問題があるので開発者に報告してください"));

//NLIB_ERR_GETPLAYERSTATUS_BLOCK_NOW_COUNT_OVERFLOW
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_GETPLAYERSTATUS_BLOCK_NOW_COUNT_OVERFLOW,TEXT("アクセスが集中しているためプレイヤーステータス取得サーバーに接続できませんでした。時間をおいて再接続してみてください"));

//NLIB_ERR_GETPLAYERSTATUS_CHANT_PARSE
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_GETPLAYERSTATUS_CHANT_PARSE,TEXT("取得したプレイヤーステータスが解析できる形式のものではありません。有料放送に接続したなどの理由によりデータが暗号化されている可能性があります"));

///NLIB_HEARTBEAT_FAILED_CONNECT
DECLARE_NLIB_ERROR_MESSAGE(NLIB_HEARTBEAT_FAILED_CONNECT,TEXT("ハートビートサーバーへの接続に失敗しました"));

///NLIB_ERR_PUBLISHSTATUS_ERROR
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_PUBLISHSTATUS_ERROR,TEXT("生主情報取得が失敗しました"));

///NLIB_ERR_STREAM_IS_NULL
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_STREAM_IS_NULL,TEXT("渡されたストリームオブジェクトがNULLです"));

///NLIB_ERR_YOUARE_NOTOWNER
DECLARE_NLIB_ERROR_MESSAGE(NLIB_ERR_YOUARE_NOTOWNER,TEXT("あなたは生主ではありません"));

#define NLIB_ERRMESSAGE_TABLE_START(c) switch(c){


#define NLIB_ERRMESSAGE_CASE(m,c)\
case c:{\
	m = ERROR_##c##MESSAGE;\
	break;\
}

#define NLIB_ERRMESSAGE_TABLE_END()		}

LPCTSTR NLIB_GetErrorMessage(NLIB_RESULT rsltCode){

	static LPCTSTR INI_ERRMES = TEXT("");
	LPCTSTR errmes = INI_ERRMES;

	//メッセージテーブル
	NLIB_ERRMESSAGE_TABLE_START(rsltCode)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_OK)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_COOKIE_FAILED)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_INITALIZE_FAILED_NETWORK)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_LIVENO_IS_NULL)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_LIVENO_FAILED_TOOBIG)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_LIVENO_FAILED_UNDEFEINE)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_USERSESSION_FAILED_TOOBIG)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_FAILED_CONNECT)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_GETPLAYERSTATUS_INVALID_LV)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_GETPLAYERSTATUS_INVALID_THREAD)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_GETPLAYERSTATUS_CLOSED)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_GETPLAYERSTATUS_UNKNOWN_ERROR)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_GETPLAYERSTATUS_SERVER_ERROR)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_GETPLAYERSTATUS_DELETED)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_GETPLAYERSTATUS_FULL)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_GETPLAYERSTATUS_PERMISSION_DENIED)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_GETPLAYERSTATUS_ACCESS_LOCKED)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_GETPLAYERSTATUS_REQUIRE_COMMUNITY_MEMBER)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_GETPLAYERSTATUS_COMINGSOON)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_GETPLAYERSTATUS_NOTFOUND)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_GETPLAYERSTATUS_NOTLOGIN)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_GETPLAYERSTATUS_UNKNOWN)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_GETPLAYERSTATUS_MAINTENANCE)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_GETPLAYERSTATUS_NOT_PERMITTED)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_GETPLAYERSTATUS_REQUIRE_ACCEPT_PRINT_TIMESHIFT_TICKET)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_GETPLAYERSTATUS_TSARCHIVE)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_GETPLAYERSTATUS_USERTIMESHIFT)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_GETPLAYERSTATUS_UNDEFINED)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_WATCHLIVENICOVIDEO_FAILED_CONNECT)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_BUFFER_TOOLITTLE)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_FAILED_NETWORK)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_PLAYERSTATUS_ERROR)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_HEARTBEAT_ERROR)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_JSON_PARSE)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_SHELL_FAILED)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_NOT_LIVECONNECT)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_LIVE_GETPOSTKEY_FAILED)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_CODE_NOTSET)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_GETPLAYERSTATUS_NOAUTH)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_GETPLAYERSTATUS_BLOCK_NOW_COUNT_OVERFLOW)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_GETPLAYERSTATUS_CHANT_PARSE)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_HEARTBEAT_FAILED_CONNECT)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_STREAM_IS_NULL)
		NLIB_ERRMESSAGE_CASE(errmes,NLIB_ERR_YOUARE_NOTOWNER)
	NLIB_ERRMESSAGE_TABLE_END()
	


	return errmes;
}