//
//  Setup.h
//  ZeroRec/Komadori
//
//  Created by AIG-Soft on 11/03/01.
//  Copyright 2011 AIG-Soft. All rights reserved.
//

#import <UIKit/UIKit.h>
#import	"libs.h"
#import "Log.h"				// これはUSE_LOGにかかわらず読み込むこと
#if defined(USE_ALARM)
#import	"RotationViewController.h"
#endif

enum { // tmValuesの要素番号：機能定義によらず変更しないこと
	TMExitDelay=0,
	TMConstantInterval,
	TMAlarmInterval,
	TMAlarmPost,
	TMAlarmYokushi,
	TMPlaybackSpeed,
	TMMaxPics,
	TMAlarmLimit,		// リトリガー設定を含む
	TMNShot,
	// 要素数
	MAX_TMValues
};

enum { // picturesの要素番号：機能定義によらず変更しないこと
	PICTURE_LATEST=0	// 直近の録画中
,	PICTURE_CONSTANT	// 常時録画総枚数
,	PICTURE_ALARM		// アラーム録画総枚数
	// 要素数
,	MAX_PICTURES
};

#define	MIN_STEP	(5)					// 録画時間の分単位
#define	TIMER_1HOUR	(60/MIN_STEP)		// 1時間あたりのタイマー区間数
#define	TIMER_1DAY	(24*TIMER_1HOUR)	// 1日分のタイマー区間数

#ifdef USE_COLORSELECT
enum { // atrbPositionの定数
	ATRB_POSITION_NONE=0
,	ATRB_POSITION_TOP_LEFT
,	ATRB_POSITION_TOP_CENTER
,	ATRB_POSITION_TOP_RIGHT
,	ATRB_POSITION_BOTTOM_LEFT
,	ATRB_POSITION_BOTTOM_CENTER
,	ATRB_POSITION_BOTTOM_RIGHT
	//
,	MAX_ATRB_POSITION
};

typedef struct {
	CGFloat	r;
	CGFloat	g;
	CGFloat	b;
} RGB;

#define	COLORS	(13)	// setup.m;((sizeof(rgb)/sizeof(RGB))-1)相当
#endif

enum { // レベルの設定
	LEVEL_OFF=0,			// OFF
	LEVEL_WAIT_DISCONTINUE,	// 連続が止まるのを待つ
	LEVEL_FORCE_CANCEL,		// 強制連続解除
};

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

@interface Setup : NSObject
{
	BOOL			fsound;			// OS setup
	NSTimeInterval	tmValues[MAX_TMValues];
#ifdef USE_TIMER
	char			recPtrn[24*TIMER_1HOUR];	// タイマーの時間帯別全ON/OFF表;省メモリのためBOOLでなくcharで記録する
#endif
	// 以下は設定値ではなく内部情報
	NSUInteger	pictures[MAX_PICTURES];	// 録画記録枚数(上限処理は入れてないが、メモリ容量による制約があるので、引っかかることはない)
}
//
@property (nonatomic,copy)	 NSString *latestDate;	// 最終撮影画像日時
@property (nonatomic,strong) NSString *latestEvent;	// 最新画像イベント
@property (nonatomic) UIImagePickerControllerCameraDevice 	 cameraDevice;		// Rear/Front
@property (nonatomic) UIImagePickerControllerCameraFlashMode cameraFlashMode;	// on/auto/off
@property (nonatomic) BOOL 			flaunchSound;	// OS setup
@property (nonatomic) BOOL 			fantiSleep;		// OS setup
#ifdef USE_BLUETOOTH
@property (nonatomic) BOOL 			fbluetoothShutter;
#endif
#if defined(USE_ALARM)||defined(USE_NSHOT)
@property (nonatomic) BOOL 			falarmRetrigger;
@property (nonatomic) BOOL 			falarmShake;
@property (nonatomic) BOOL 			falarmRotation;
@property (nonatomic) BOOL 			falarm3D;
@property (nonatomic) BOOL 			falarm1file;
@property (nonatomic) NSUInteger	alarmQuality;	// QUALITY_*
#endif
#if defined(USE_ALARM)
@property (nonatomic) NSUInteger	selectData;		// DATA_* ; RotationControl.h
@property (nonatomic) NSUInteger	falarm3DLevel;	// LEVEL_*
@property (nonatomic,strong) RotationControl *rotationControl;	// 3Dアラーム自体の設定は、これが保持する;確保・開放は外部で行うこと
#endif
#ifdef USE_SETUPOUTPUT
@property (nonatomic) BOOL fpdf;	// OS setup
#endif
#ifdef USE_TIMER
@property (nonatomic) NSUInteger recStartHour,recStartMin,recEndHour,recEndMin;
#endif
#ifdef USE_COLORSELECT
@property (nonatomic) NSUInteger atrbPosition;		// ATRB_POSITION*
@property (nonatomic) NSUInteger atrbColor;
#endif
#ifdef USE_CONSTANT
@property (nonatomic) NSUInteger constantQuality;	// QUALITY_*
#endif

// tmValues[]を通常変数名としてアクセスするための定義
// tmValues[]の各要素がそれぞれの設定値を保持している
#define	tmExitDelay			tmValues[TMExitDelay]
#define	tmConstantInterval	tmValues[TMConstantInterval]
#define	tmAlarmInterval		tmValues[TMAlarmInterval]
#define	tmAlarmPost			tmValues[TMAlarmPost]
#define	tmAlarmYokushi		tmValues[TMAlarmYokushi]
#define	tmPlaybackSpeed		tmValues[TMPlaybackSpeed]
#define	tmMaxPics			tmValues[TMMaxPics]
#define	tmAlarmLimit		tmValues[TMAlarmLimit]
#define tmNShot				tmValues[TMNShot]			
//
- (void)setTmValues:(NSTimeInterval)tm valno:(NSUInteger)no;
- (NSTimeInterval)getTmValues:(NSUInteger)no;
- (void)setPictures:(NSUInteger)pics valno:(NSUInteger)no;
- (void)incPictures:(NSUInteger)no;
- (NSUInteger)getPictures:(NSUInteger)no;
- (id)setupInit:(NSUInteger)mode;
- (void)loadSetup;
- (void)readSetupOuter;
- (void)saveSetup;
- (void)saveLatestData;
// 以下は引数別定義(fchange)
enum {
	FMT_NONE=0,
	FMT_PLAYBACKSPEED,
	FMT_MAXPICS,
	FMT_NSHOT,
};
- (NSString *)makeTimeIntervalMessage:(NSTimeInterval)tm fmin:(BOOL)fminute fchange:(NSUInteger)fchange;
- (NSString *)makeTimeIntervalMessage:(NSTimeInterval)tm fmin:(BOOL)fminute;
- (NSString *)makeTimeIntervalMessage:(NSTimeInterval)tm;
//
-(NSArray *)setTimeIntervalMessages:(NSTimeInterval *)tbl count:(NSUInteger)cnt fmin:(BOOL)fminute fchange:(NSUInteger)fchange;
#ifdef USE_COLORSELECT
-(NSArray *)setAtrbPositionArray;
#endif
#ifdef USE_COUNT
- (void)makePicturesCount:(NSMutableString *)mstr textView:(UITextView *)textView;
#endif
#if defined(USE_ALARM)
- (void)makeAlarmSource:(NSMutableString *)mstr textView:(UITextView *)textView;
#endif
#ifdef USE_TIMER
- (BOOL)getRecTimer:(NSUInteger)pos;
- (void)TransferTimer;
- (BOOL)checkRecTimer;
#endif
- (void)makeSetupString1:(NSUInteger)tag mstr:(NSMutableString *)mstr;
- (BOOL)isAlarmRec;
- (BOOL)isSettingConstant;
- (BOOL)isSetting1Shot;
- (BOOL)isSettingNShot;

//
#ifdef USE_COLORSELECT
UIColor		*getColor(NSUInteger cno);
NSUInteger	getDefaultColorNo(void);
NSUInteger	getWhiteColorNo(void);
NSUInteger	getColorPercent(NSUInteger cno,NSUInteger *r,NSUInteger *g);
#endif
#ifdef USE_EXITDELAY
NSUInteger	countTblExitDelay(void);
#endif
#if defined(USE_ALARM)||defined(USE_NSHOT)
NSUInteger	countTblAlarmPost(void);
NSUInteger	countTblAlarmInterval(void);
#endif
#if defined(USE_ALARM)
NSUInteger	countTblAlarmYokushi(void);
NSUInteger	countTblAlarmLimit(void);
#endif	// USE_ALARM
NSUInteger	countTblPlaybackSpeed(void);
NSUInteger	countTblMaxPics(void);
#ifdef USE_TIMER
NSUInteger	TimerPosition(NSUInteger hour,NSUInteger min);
#endif
#ifdef USE_CONSTANT
NSUInteger	countTblConstantInterval(void);
#endif
#ifdef USE_NSHOT
NSUInteger	countTblNShot(void);
#endif
NSInteger	searchTbl(NSTimeInterval *tbl,NSTimeInterval tm,NSUInteger cnt);
UIImagePickerControllerCameraDevice		CheckCameraDevice(   UIImagePickerControllerCameraDevice    cameraDevice   );
UIImagePickerControllerCameraFlashMode	CheckCameraFlashMode(UIImagePickerControllerCameraFlashMode cameraFlashMode);
NSString	*textSegmentQuality(NSUInteger quality);

// イベント表示シンボル;ローカライズ不要にしておく
#define SYMBOL_NONE				@"-"
#define SYMBOL_ALARM			@"A"	/* ↓大文字・小文字以外は同じにしておく */
#define SYMBOL_ALARM_RETRIGGER	@"a"	/* リトリガーの時はシンボルを変えておく */
#define SYMBOL_CONSTANT			@"C"
#define SYMBOL_1SHOT			@"1"
#define SYMBOL_NSHOT			@"n"
enum { // イベント種類
	EVENT_NONE=0,		// イベント未発生/録画終了後
	EVENT_CONSTANT,
	EVENT_ALARM,
	EVENT_ALARM1,		// アラームポスト1枚
	EVENT_1SHOT,
};

@end

// setup変数を識別するためのTAG
// IBでも各Cell.tagに設定すること
// 機能定義にかかわらず値は変更しないこと(IB内で使っているから)
enum {
	SETUP_TIMER=0
,	SETUP_EXITDELAY
,	SETUP_FOVERWRITE
,	SETUP_ALARMQUALITY
,	SETUP_ALARMINTERVAL
,	SETUP_ALARMPOST
,	SETUP_ALARMYOKUSHI
,	SETUP_CONSTANTQUALITY	// 7
,	SETUP_CONSTANTINTERVAL
,	SETUP_FALARMLEVEL		// 現在は未使用だが、TAGを書き換えないため、このままにしておく
,	SETUP_FALARMRETRIGGER	// 10
,	SETUP_CAMERADEVICE
,	SETUP_CAMERAFLASHMODE
,	SETUP_ATRBPOSITION		// 13
,	SETUP_ATRBCOLOR
,	SETUP_PLAYBACKSPEED		// 15
,	SETUP_MAXPICS			// 16
,	SETUP_BLUETOOTHSHUTTER	// 17
,	SETUP_ALARMSOURCE		// 18
,	SETUP_ALARMLIMIT		// 19
,	SETUP_FALARM1FILE		// 20
	// 設定ではない
,	SETUP_COUNTER=255
};

typedef enum { // 画質
	QUALITY_LOW=0
,	QUALITY_STD
,	QUALITY_HIGH
,	QUALITY_SUPER
    //
,   MAX_QUALITY
} QUALITY;
extern  CGFloat tblQuality[MAX_QUALITY]; // AVI用

// JPEG画像サイズ；V1.0では固定
#if 0
#define ImageSizeYOKO   CGRectMake(0.0,0.0,640.0,480.0) // 横の時
#define ImageSizeTATE   CGRectMake(0.0,0.0,480.0,640.0) // 縦の時
#else
#ifdef KOMADORI	// できるだけ高画質
#define ImageSizeYOKO   CGRectMake(0.0,0.0,960.0,720.0) // 横の時
#define ImageSizeTATE   CGRectMake(0.0,0.0,720.0,960.0) // 縦の時
#else	// 防犯限定なので省サイズ
#define ImageSizeYOKO   CGRectMake(0.0,0.0,480.0,360.0) // 横の時
#define ImageSizeTATE   CGRectMake(0.0,0.0,360.0,480.0) // 縦の時
#endif
#endif
// 日時写しこみ位置オフセット;本来縦横で変更すべきかもしれないがV1.0では固定
#define XOFST_ATRB		(2.0)
#define YOFST_ATRB		(2.0)
//
#define	PIC1			(0.1)	// 1枚
#define	CountTbl(t)	(sizeof(t)/sizeof(NSTimeInterval))	// テーブルの要素数を得る
extern	NSTimeInterval	tblExitDelay[];
extern	NSTimeInterval	tblConstantInterval[];
extern	NSTimeInterval	tblAlarmInterval[];
extern	NSTimeInterval	tblAlarmPost[];
extern	NSTimeInterval	tblAlarmYokushi[];
extern	NSTimeInterval	tblPlaybackSpeed[];
extern	NSTimeInterval	tblMaxPics[];
extern	NSTimeInterval	tblAlarmLimit[];
//
// デフォルト値(即値)；それぞれtbl〜[];setup.hの中にその値があること
#define	defCameraDevice		UIImagePickerControllerCameraDeviceRear
#define	defCameraFlashMode	UIImagePickerControllerCameraFlashModeAuto
#define defAtrbPosition		ATRB_POSITION_BOTTOM_CENTER
#define	defAtrbColor		getDefaultColorNo()
#define	defExitDelay		None

#ifdef KOMADORI
	#define	defConstantInterval	PIC1	// こまどり君では1shotがデフォルト
#else
	#define	defConstantInterval	2.5		// V1.5:どうもiPod touch4では負荷が高すぎるようなので2.5にした
#endif
#if defined(USE_NSHOT)
	#define defAlarmPost		2.0
#else
	#define	defAlarmPost		5.0
#endif

#define	defAlarmInterval	None	// KomadoriではNSHOTが無効な状態
#define	defAlarmYokushi		5.0
//
#define	defRecStartHour		0
#define	defRecStartMin		0
#define	defRecEndHour		defRecStartHour	// これで24時間設定
#define	defRecEndMin		defRecStartMin
#define	defFalarmRetrigger	NO
#define	defFoverwrite		NO
#define	defAlarmQuality		QUALITY_STD
#define	defConstantQuality	QUALITY_STD
#define	defPlaybackSpeed	5.0
#define	defMaxPics			1000.0		// v1.1;V1.5で増量
#define	defBluetoothShutter	NO
//
#define defFalarmShake		YES
#define defFalarmRotation	YES			// v1.5	
#define defFalarm3D			NO
#define	defFalarm1file		NO
#define	defSelectData		DATA_DEGREE
#define	defFalarm3DLevel	LEVEL_OFF
#define	defAlarmLimit		None		// v1.5 : limitなし

enum { // SETUPのバージョンごとの設定領域
	SET_SETUP_ALL=0	// すべて
,	SET_SETUP_V11	// v1.1追加分
,	SET_SETUP_V15	// v1.5追加分
,	SET_SETUP_V16	// v1.6追加分
};

#define	keyCameraDevice		@"cameraDevice"
#define	keyCameraFlashMode	@"cameraFlashMode"
#define keyAtrbPosition		@"atrbPosition"
#define	keyAtrbColor		@"atrbColor"
#define	keyFoverwrite		@"foverwrite"
#define	keyFalarmRetrigger	@"falarmRetrigger"
#define	keyAlarmQuality		@"alarmQuality"
#define	keyConstantQuality	@"constantQuality"
#define	keyExitDelay		@"ExitDelay"
#define	keyAlarmInterval	@"AlarmInterval"
#define	keyAlarmPost		@"AlarmPost"
#define	keyAlarmYokushi		@"AlarmYokushi"
#define	keyConstantInterval	@"ConstantInterval"
#define	keyRecStartHour		@"RecStartHour"
#define	keyRecStartMin		@"RecStartMin"
#define	keyRecEndHour		@"RecEndHour"
#define	keyRecEndMin		@"RecEndMin"
#define	keyPlaybackSpeed	@"PlaybackSpeed"
#define	keyMaxPics			@"MaxPics"
#define	keyBluetoothShutter	@"BluetoothShutter"
#define	keyFalarmShake		@"falarmShake"
#define	keyFalarmRotation	@"falarmRotation"
#define	keyFalarm3D			@"falarm3D"
#define	keyFalarm1file		@"falarm1file"
#define	keySelectData		@"SelectData"
#define	keyFalarm3DLevel	@"falarm3DLevel"
#define	keyAlarmLimit		@"AlarmLimit"

// 情報
#define keyLatestDate		@"LatestDate"
#define keyLatestAlarm		@"LatestAlarm"
// iOS内設定;Root.plistで参照(書き換え注意)
#define	keyFsound			@"fsound"
#define	keyFpdf				@"fpdf"
#define	keyFlaunchSound		@"flaunchSound"
#define	keyFantiSleep		@"fantiSleep"

// スリープを禁止していても、LIMIT_SLEEP以上操作がなければ強制的にスリープに入ってしまう
// Alert中では回避策が全くなかった
// OSの「自動ロック」制御を「なし」にしたら大丈夫
#define LIMIT_SLEEP			(tMin(5))

