//
//  setup.m
//  traceWrite
//
//  Created by 今井 彰彦 on 2011/12/05
//  Copyright 2011 AIG-Soft. All rights reserved.
//

#import "main.h"
#import "Setup.h"
#import "click.h"
#import "libs.h"
#import "FileControl2.h"
#import "FontSelect.h"
#import "Bunsho.h"
#import "BunshoList.h"

//-----------------------------------------

@implementation Setup

//-----------------------------------------

// 設定値の保存(プログラム内からの変更点のみ)
// 常に最新の構造でOK
-(void)saveSetup
{
	printSelf();
	NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
	[defaults setObject:programVersion		forKey:keyProgramVersion];		// これは外部設定(Root.strings)でも参照している
	//
	[defaults setObject:_bunFileName		forKey:keyBunFileName];
// V2.0では必要ない
//	[defaults setFloat:fontSize				forKey:keyFontSize];
//	[defaults setObject:fontName			forKey:keyFontName];
	[defaults setInteger:_attachFile		forKey:keyAttachFile];
	//
	[defaults setObject:_currentBunFileName	forKey:keyCurrentBunFileName];
	[defaults setFloat:_currentFontSize		forKey:keyCurrentFontSize];
	[defaults setObject:_currentFontName	forKey:keyCurrentFontName];
#if 0 // これでは何故か警告が出るし、記録もされてない
	NSValue *val=[NSValue value:&scrollPoint withObjCType:@encode(CGPoint)];
	[defaults setObject:val					forKey:keyScrollPoint];
#else
	[defaults setFloat:_scrollPoint.x		forKey:keyScrollPointX];
	[defaults setFloat:_scrollPoint.y		forKey:keyScrollPointY];
#endif
	[defaults setFloat:_penWidthBlack		forKey:keyPenWidthBlack];
	[defaults setFloat:_penWidthRed			forKey:keyPenWidthRed];
	//
	[defaults synchronize]; // 同期(即時反映);iOS4では必須
}

// 一番最初のSETUP値設定
// アプリケーションインストール後/バージョンアップ後1回だけ
// mode=SET_SETUP_*
-(void)initialSetup:(NSUInteger)mode
{
	printSelf();
	// デフォルト設定値
	//
	nslog(@"個別一番最初の初期化");
	NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
	switch (mode) {
		case SET_SETUP_ALL:
			// 内部
			if ([NSLocalStr(@"LOCAL") isEqualToString:LOCAL_JAPAN]) {
				// 日本語のとき
				self.bunFileName=@"hannyasingyo."EXT_BUNSHO;
			} else {
				// 英語の時
				self.bunFileName=@"kana."EXT_BUNSHO;
			}
			setDefaultInternalOriginalText(YES,self);
			NSString *fontName=self.fontName; // 直接&self.fontName/&_fontNameできないので
			_fontSize=readBunshoFont(_bunFileName,&fontName);
			_fontName=fontName;
			//
			_penWidthRed	=
			_penWidthBlack	=defPenWidth(_fontSize);
			_attachFile		=FILE_PDF;
			_scrollPoint.x	=SCROLLAREA_INIT; // 初期設定させる(.xだけが判定に使われる)
			_scrollPoint.y	=SCROLLAREA_INIT;
			// 外部
			_fsound			=YES;
			// 保存(外部)
			[defaults setBool:_fsound forKey:keyFsound];
#if 0
		case SET_SETUP_V20:
			// V2.0
#endif
			break;
	}
	// 初期保存
	[defaults setBool:YES forKey:keyInitialSetup];		// 初期設定をした印(V1.0〜)
	[defaults setBool:YES forKey:keyInitialSetupV20];	// 初期設定をした印(V2.0〜)
	// 保存(内部)
	[self saveSetup];
}

// SETUP読み込み
// リターン値：YES=初回起動
-(BOOL)loadSetup
{
	printSelf();

	// 最大フォントサイズを設定する
	_fontSizeMax=maxFontSize();
	
	NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
	// インストール直後かどうかを判定
	if ([defaults boolForKey:keyInitialSetup]==NO) { // 新規インストールの時(defaultなし)
		nslog(@"initialSetup:SET_SETUP_ALL");
		// でも、KeyChainによる共有設定はあるかもしれない
		[self initialSetup:SET_SETUP_ALL];
		// 初期フォントを設定
		self.currentFontName=self.fontName;
		_currentFontSize=_fontSize;
		//
		return (YES); // 初回起動の印
	}
	nslog(@"完全初回以外");
	setDefaultInternalOriginalText(NO,self);
	//
	// 従来の設定値であるだけは読み込む
	// V1.0(txt)とV2.0(xml)ではテキストの拡張子が違うので、変換する（ファイル名本体は同じ）
	self.bunFileName=[NSString stringWithFormat:@"%@."EXT_BUNSHO,[[defaults objectForKey:keyBunFileName] stringByDeletingPathExtension]];
	nslog(@"setup.bunFileName=%@",_bunFileName);
	_fontSize				=[defaults  floatForKey:keyFontSize				];	nslog(@"setup.fontSize=%f"			,_fontSize);
	self.fontName			=[defaults objectForKey:keyFontName				];	nslog(@"setup.fontName=%@"			,_fontName);
	self.currentBunFileName	=[defaults objectForKey:keyCurrentBunFileName	];	nslog(@"setup.currentBunFileName=%@",_currentBunFileName);
		 _currentFontSize	=[defaults  floatForKey:keyCurrentFontSize		];	nslog(@"setup.currentFontSize=%f"	,_currentFontSize);
	self.currentFontName	=[defaults objectForKey:keyCurrentFontName		];	nslog(@"setup.currentFontName=%@"	,_currentFontName);
	_penWidthBlack			=[defaults  floatForKey:keyPenWidthBlack		];	nslog(@"setup.penWidthBlack=%f"		,_penWidthBlack);
	_penWidthRed			=[defaults  floatForKey:keyPenWidthRed			];	nslog(@"setup.penWidthRed=%f"		,_penWidthRed);
	//
#if 0	// うまく読み出せない
	NSValue *val=[defaults objectForKey:keyScrollPoint];
	[val getValue:&scrollPoint];
#else
	_scrollPoint.x=[defaults floatForKey:keyScrollPointX];
	_scrollPoint.y=[defaults floatForKey:keyScrollPointY];
#endif
	nslog(@"setup.scrollPoint=%f,%f",_scrollPoint.x,_scrollPoint.y);
	//
	_attachFile	=[defaults integerForKey:keyAttachFile	];
	nslog(@"setup.attachFile=%d",(int)_attachFile);
	//
	// programVersionは「設定」での表示専用なので、プログラム中に取り込む必要なし
	// 新規設定値はデフォルトを設定する
	if ([defaults boolForKey:keyInitialSetupV20]==NO) { // v2.0では初回
		nslog(@"initialSetup:SET_SETUP_V20");
		[self initialSetup:SET_SETUP_V20]; // デフォルト設定＆記録
	}
	return (NO); // 初回起動ではない
}

// 「設定画面」分読み込み
-(void)readSetupOuter
{
	printSelf();
	NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
	_fsound=[defaults boolForKey:keyFsound];
	nslog(@"fsound=%d",_fsound);
	//
	clickOnOff(_fsound);
}

//----------------------------------------------------

@end
