//
//  BunshoList.m
//  traceWrite
//
//  Created by 今井 彰彦 on 2012/02/20.
//  Copyright (c) 2012 AIG-Soft. All rights reserved.
//

#import "BunshoList.h"
#import "FontSelect.h"
#import "libs.h"
#import "Setup.h"

/* plist内容
	"FontName:文書名" : "フォント名"
	"FontSize:文書名" : "フォントサイズ"
 */

NSString *makeBunFileFontName(NSString *bunFile)
{
	return [NSString stringWithFormat:@"FontName:%@",bunFile];
}

NSString *makeBunFileFontSize(NSString *bunFile)
{
	return [NSString stringWithFormat:@"FontSize:%@",bunFile];
}

// 1原書分設定サブルーチン
void setBunshoFontSub(Bunsho *bunsho,NSMutableDictionary *bunFontDic,NSString *path,NSInteger mode,NSString *fontName,CGFloat fontSize)
{
	printFunc();
//	nslog(@"path=%@",path);
	[bunsho load:path]; // (フルパス名) → fname,font4/5
	if (mode==MODE_FIRST) {
		fontName=bunsho.font5;
	}
	nslog(@"設定:%@(%f)",fontName,fontSize);
	[bunFontDic setObject:fontName									 forKey:makeBunFileFontName(bunsho.fname)];
	[bunFontDic setObject:[NSString stringWithFormat:@"%f",fontSize] forKey:makeBunFileFontSize(bunsho.fname)];
}

// 読み出し
// bunFile : ファイル名
CGFloat readBunshoFont(NSString *bunFile,NSString **fontName_)
{
	printFuncs(@"%@",bunFile);
	//
	NSMutableDictionary *bunFontDic=[NSMutableDictionary dictionaryWithContentsOfFile:PATH_BUNFONT];
//	nslog(@"bunFontDic=%@",bunFontDic);
	//
	CGFloat fontSize_;
	*fontName_= [bunFontDic objectForKey:makeBunFileFontName(bunFile)];
	if (*fontName_==nil) {
		// 見つからない＝新規登録；ユーザー原書のみ
		nslog(@"見つからない：先に原書登録する");
		// 1原書分設定
		{
			Bunsho *bunsho=[[Bunsho alloc]init];
			//
			setBunshoFontSub(bunsho,bunFontDic,[Bunsho bunFullPath:bunFile],MODE_FIRST,nil,defFontSize());
			// ファイル書き出し
			nslog(@"bunFontDic=%@",bunFontDic);
			if (![bunFontDic writeToFile:PATH_BUNFONT atomically:YES]) {
				nslog(@"ファイル書き込みエラー");
			}
		}
		// 設定
		return (readBunshoFont(bunFile,fontName_));
	}
	// 見つかった
	fontSize_=[[bunFontDic objectForKey:makeBunFileFontSize(bunFile)]floatValue];
	nslog(@"読み出し:%@(%f)",*fontName_,fontSize_);
	return (fontSize_);
}

// 書き込み
// ユーザー原書を追加したときは、SETUPでの設定が必要なので必ずここを通り、plistに追加される
// bunFile : ファイル名
// fontName_==nilのときは値削除
// ここで登録するのは実際に使うフォントなので、iOSのバージョンは関係ない
// アプリインストール後にバージョンを変更したときは、代替フォントで表示されるだけ;表示がどうなるかは不明
void writeBunshoFont(NSString *bunFile,NSString *fontName_,CGFloat fontSize_)
{
	printFuncs(@"%@",bunFile);
	// キー名の作成
	NSString *bunFileFontName=makeBunFileFontName(bunFile);
	NSString *bunFileFontSize=makeBunFileFontSize(bunFile);
	//
	NSMutableDictionary *bunFontDic=[NSMutableDictionary dictionaryWithContentsOfFile:PATH_BUNFONT];
//	nslog(@"bunFontDic=%@",bunFontDic);
	//
	if (fontName_==nil) {
		// 文書情報削除
		nslog(@"削除");
		[bunFontDic removeObjectForKey:bunFileFontName];
		[bunFontDic removeObjectForKey:bunFileFontSize];
	} else {
		// 書き込み
		nslog(@"書き込み=設定:%@(%f)",fontName_,fontSize_);
		[bunFontDic setObject:fontName_ forKey:bunFileFontName];
		[bunFontDic setObject:[NSString stringWithFormat:@"%f",fontSize_] forKey:bunFileFontSize];
	}
	// ファイル書き出し
	[bunFontDic writeToFile:PATH_BUNFONT atomically:YES];
}

// 内蔵原文用デフォルト設定=初期plist作成
// 内蔵分だからplistを作ってしまってもいいが、将来変更した時に面倒なので、プログラムによる作成にする
void setDefaultInternalOriginalText(BOOL ffirst,Setup *setup)
{
	// 初回起動(ffirst=YES);V2.0のみ
	//	  (plistなし)原文ファイルから作る
	// 初回起動でない
	//	  plistあり：何もしない
	//         なし：V1.x→V2.0:Setupから作る
	
	printFuncs(@"%@",PATH_BUNFONT);
	NSInteger mode=MODE_NONE; // 作成なし
	NSString *fontName=@""; // Analyzerの警告回避のため
	CGFloat	  fontSize;
	if (ffirst) {
		nslog(@"初回起動");
		mode=MODE_FIRST;
		fontSize=defFontSize();
	} else {
		if (![[NSFileManager defaultManager]fileExistsAtPath:PATH_BUNFONT]) {
			nslog(@"V1.x→V2.0:Setupから作る");
			mode=MODE_V1V2;
			fontName=setup.currentFontName;
			fontSize=setup.currentFontSize;
			if (fontName==nil) {
				// デバッグ中はplistなしV2.0->V2.0があり得る
				fontName= @"Hiragino Mincho ProN";
				fontSize=defFontSize();
			}
		}
	}
	if (mode) {
		Bunsho *bunsho=[[Bunsho alloc]init];
		NSMutableDictionary *bunFontDic=[[NSMutableDictionary alloc]init];
		// ファイル名(*.txt) : デフォルトフォント名/フォントサイズ
		NSArray *fileListInternal=[[NSBundle mainBundle]pathsForResourcesOfType:EXT_BUNSHO inDirectory:DIR_SYSTEM]; // 本体内部はこれ
		nslog(@"fileListInternal=%@",fileListInternal);
		NSEnumerator *emu=[fileListInternal objectEnumerator];
		NSString *path;
		while (path=[emu nextObject]) {
			setBunshoFontSub(bunsho,bunFontDic,path,mode,fontName,fontSize);
		}
		// ファイル書き出し
		nslog(@"bunFontDic=%@",bunFontDic);
		if (![bunFontDic writeToFile:PATH_BUNFONT atomically:YES]) {
			nslog(@"ファイル書き込みエラー");
		}
	} // if (mode)
	printFuncs(@"%@", @"end");
}
