//////////////////////////////////////////
// User.h
// Renamerで使用する外部変数と外部関数
// Copyright (c) 05/06/2020 by ECCSkelton
//////////////////////////////////////////

///////////////////////
//コモンダイアログ関連
///////////////////////
CMNDLG g_CmnDlg;
CSTR g_Path;		//取得パス名
CTTIP g_Tip;

///////////////////////////
//ファイル名記録用CSTR変数
///////////////////////////
CSTR g_OldFiles, g_NewFiles, g_OrgFiles;

/////////////////////////////
//ファイルパス記録用CSTR変数
/////////////////////////////
CSTR g_HelpFile;
CSTR g_LogPath;

///////////////////////////////////////
//外部関数 ListFiles
//CSTRのカンマ区切りファイル名をリスト
//ボックスに表示すると共に、ID(LISTBOX)
//のフォント当りのピクセルを調べて水平
//スクロールバーをセットする
///////////////////////////////////////
void ListFiles(HWND hWnd, int ID, CSTR* files) {

	//変数リスト
	SIZE size;											//ListBoxの表示文字列サイズ
	int len = 0, max = 0;								//文字列の長さ
	HWND hLB = GetDlgItem(hWnd, ID);					//リストボックスのハンドル
	CSTR Name, List(*files), MaxStr;					//ファイル名、リストデータ、最長名
	//リストボックス内掃除
	int i = SendMessage(hLB, LB_GETCOUNT, 0, 0);
    if(i > 0) {
		for(--i; i >= 0; i--)
			SendMessage(hLB, LB_DELETESTRING, (WPARAM)i, 0);
	}
	//変更予定ファイル名の登録
	for(int i = 0; List.Next(Name); i++) {
		len  = lstrlenW(Name.ToChar());
		if(len > max) {
			max = len;
			MaxStr = Name;
		}
		SendMessage(hLB, LB_INSERTSTRING, i, (LPARAM)Name.ToChar());
	}
	//IDC_LISTBOXの水平スクロールバーを利用可能にする
	HDC hDC = GetDC(hLB);								//リストボックスのDC取得
	GetTextExtentPointW(hDC, MaxStr.ToChar(), max, &size);
	ReleaseDC(hLB, hDC);								//取得したDCの開放
	SendMessage(hLB, LB_SETHORIZONTALEXTENT, size.cx, (LPARAM)0);
}

///////////////////////////////////////
//外部関数 RenameFile
//g_OrgFilesのカンマ区切りファイル名を
//g_NewFilesのカンマ区切りファイル名に
//変更する
//戻り値：一つでも失敗があればFALSE）
//"RenameLog(MM-DD-YYYY-HH-MM).log"と
//いうログファイルをプログラムの下の
//RemaneLogフォールダーに残す。
///////////////////////////////////////
bool RenameFiles(bool flag) {

	bool result = TRUE;
	//本日のローカル日付をログファイル（log）のfilename文字列に入れる
	CSTR log = L"";
	SYSTEMTIME st;
	GetLocalTime(&st);
	WCHAR fn[36];
	wsprintfW(fn, L"RenameLog(%02d-%02d-%04d-%02d-%02d-%02d).log", st.wMonth, st.wDay, st.wYear, st.wHour, st.wMinute, st.wSecond);
	//ファイル名変更実行
	g_OldFiles = g_OrgFiles;		//g_OrgFilesのデータを変更しないようにコピーのg_OldFilesを使う
	CSTR filename, buff1, buff2;
	while(g_OldFiles.Next(filename)) {
		buff1 = g_Path + L"\\";
		buff1 = buff1 + filename;
		g_NewFiles.Next(filename);	//最終的にg_NewFilesのデータは空になる
		buff2 = g_Path + L"\\";
		buff2 = buff2 + filename;
		if(MoveFileW(buff1.ToChar(), buff2.ToChar())) {	//'\"'で括るとエラーになるので注意
			log = log + L"\"" + buff1 + L"\",\"" + buff2 + L"\"\r\n";
		}
		else {
			result = FALSE;
		}
	}
	//ログを保存する（後にバッチファイルとして使える）
	filename = g_LogPath + fn;
	//flagがTRUEの場合SJIS、FALSEの場合UTF-8で保存
	if(flag)
		log.ToSJISFile(filename.ToChar());
	else	//UTF-8ファイルへの書き込み（FALSEはBOM無のフラグ）
		log.ToUTF8File(filename.ToChar(), FALSE);
	return result;
}
