package hotime

import (
	. "code.hoteas.com/golang/hotime/common"
)

var IsRun = false                   //当前状态
var App = map[string]*Application{} //整个项目

//var Db = HoTimeDB{}                         //数据库实例

var Config = Map{
	"mode": 2, //模式 0生产模式，1，测试模式，2，开发模式
	//"codeConfig": Map{
	//	"admin": "config/app.json",
	//},
	"codeConfig": Slice{
		Map{
			"table":  "admin",            //默认admin，必须，有则根据数据库内当前表名做为用户生成数据
			"name":   "",                 //默认admin，非必须，有则生成代码到此目录，无则采用缺省模式使用表名
			"config": "config/app.json",  //默认config/app.json，必须，接口描述配置文件
			"rule":   "config/rule.json", //默认config/rule.json，非必须，有则按改规则生成接口，无则按系统内嵌方式生成
			"mode":   0,                  //默认0，非必须，0为内嵌代码模式，1为生成代码模式
		},
	},
	"db": Map{
		"sqlite": Map{
			"path": "config/data.db",
		},
	},
	"cache": Map{
		"memory": Map{
			"timeout": 60 * 60 * 2,
			"db":      true,
			"session": true,
		},
	},
	"error": Map{
		"1": "内部系统异常",
		"2": "访问权限异常",
		"3": "请求参数异常",
		"4": "数据处理异常",
		"5": "数据结果异常",
	},
	"tpt":         "tpt",
	"defFile":     []string{"index.html", "index.htm"},
	"port":        "80",
	"sessionName": "HOTIME",
}

var ConfigNote = Map{
	"logLevel":          "默认0，必须，0关闭，1打印，日志等级",
	"logFile":           "无默认，非必须，如果需要存储日志文件时使用，保存格式为:a/b/c/20060102150405.txt,将生成：a/b/c/年月日时分秒.txt，按需设置",
	"webConnectLogShow": "默认true，非必须，访问日志如果需要web访问链接、访问ip、访问时间打印，false为关闭true开启此功能",
	"webConnectLogFile": "无默认，非必须，webConnectLogShow开启之后才能使用，如果需要存储日志文件时使用，保存格式为:a/b/c/20060102150405.txt,将生成：a/b/c/年月日时分秒.txt，按需设置",
	"mode":              "默认0,非必须，0生产模式，1，测试模式，2开发模式，3内嵌代码模式，在开发模式下会显示更多的数据用于开发测试，并能够辅助研发，自动生成配置文件、代码等功能,web无缓存，数据库不启用缓存", //debug 0关闭1开启
	//"codeConfig": Map{
	//	"注释": "配置即启用，非必须，默认无",
	//	//"package":"默认admin，必须，mode模式为2时会自动生成包文件夹和代码文件",
	//	//"path":""
	//
	//	"packageName": "默认无，必须，包名称以及应用名，生成代码的配置文件地址，比如config/app.json，数据库有更新时自动更新配置文件以及对应的生成文件",
	//},
	"codeConfig": Slice{
		"注释:配置即启用，非必须，默认无",
		Map{ //默认无，必须，接口类别名称
			//"注释":     "", //
			"table":  "默认admin，必须，根据数据库内当前表名做为用户生成数据",
			"name":   "默认无，非必须，有则生成代码到此目录，无则采用缺省模式使用表名，如设置为：admin，将在admin目录生成包名为admin的代码",
			"config": "默认config/app.json，必须，接口描述配置文件", //
			"rule":   "默认config/rule.json，非必须，有则按改规则生成接口，无则按系统内嵌方式生成",
			"mode":   "默认0，非必须，0为内嵌代码模式，1为生成代码模式",
		},
	},
	"db": Map{
		"注释": "配置即启用，非必须，默认使用sqlite数据库",
		"mysql": Map{
			"注释":       "除prefix及主从数据库slave项，其他全部必须",
			"host":     "默认127.0.0.1，必须，数据库ip地址",
			"name":     "默认test，必须，数据库名称",
			"user":     "默认root，必须，数据库用户名",
			"password": "默认root，必须，数据库密码",
			"port":     "默认3306，必须，数据库端口",
			"prefix":   "默认空，非必须，数据表前缀",
			"slave": Map{
				"注释":       "从数据库配置，mysql里配置slave项即启用主从读写，减少数据库压力",
				"host":     "默认127.0.0.1，必须，数据库ip地址",
				"name":     "默认test，必须，数据库名称",
				"user":     "默认root，必须，数据库用户名",
				"password": "默认root，必须，数据库密码",
				"port":     "默认3306，必须，数据库端口",
			},
		},
		"sqlite": Map{
			"path": "默认config/data.db，必须，数据库位置",
		},
	},
	"cache": Map{
		"注释": "可配置memory，db，redis，默认启用memory，默认优先级为memory>redis>db,memory与数据库缓存设置项一致，缓存数据填充会自动反方向反哺，加入memory缓存过期将自动从redis更新，但memory永远不会更新redis，如果是集群建议不要开启memory，配置即启用",
		"memory": Map{
			"timeout": "默认60 * 60 * 2，非必须，过期时间，超时自动删除",
			"db":      "默认true，非必须，缓存数据库，启用后能减少数据库的读写压力",
			"session": "默认true，非必须，缓存web session，同时缓存session保持的用户缓存",
		},
		"db": Map{
			"timeout": "默认60 * 60 * 24 * 30，非必须，过期时间，超时自动删除",
			"db":      "默认false，非必须，缓存数据库，启用后能减少数据库的读写压力",
			"session": "默认true，非必须，缓存web session，同时缓存session保持的用户缓存",
		},
		"redis": Map{
			"host":     "默认服务ip：127.0.0.1，必须，如果需要使用redis服务时配置，",
			"port":     "默认服务端口：6379，必须，如果需要使用redis服务时配置，",
			"password": "默认密码空，必须，如果需要使用redis服务时配置，默认密码空",
			"timeout":  "默认60 * 60 * 24 * 15，非必须，过期时间，超时自动删除",
			"db":       "默认true，非必须，缓存数据库，启用后能减少数据库的读写压力",
			"session":  "默认true，非必须，缓存web session，同时缓存session保持的用户缓存",
		},
	},
	"error": Map{
		"1":  "内部系统异常，在环境配置，文件访问权限等基础运行环境条件不足造成严重错误时使用",
		"2":  "访问权限异常，没有登录或者登录异常等时候使用",
		"3":  "请求参数异常，request参数不满足要求，比如参数不足，参数类型错误，参数不满足要求等时候使用",
		"4":  "数据处理异常,数据库操作或者三方请求返回的结果非正常结果，比如数据库突然中断等时候使用",
		"5":  "数据结果异常，一般用于无法给出response要求的格式要求下使用，比如response需要的是string格式但你只能提供int数据时",
		"注释": "web服务内置错误提示，自定义异常建议10开始",
	},
	"tpt":              "默认tpt，必须，web静态文件目录，默认为程序目录下tpt目录",
	"defFile":          "默认访问index.html或者index.htm文件，必须，默认访问文件类型",
	"crossDomain":      "默认空 非必须，空字符串为不开启，如果需要跨域设置，auto为智能开启所有网站允许跨域，http://www.baidu.com为指定域允许跨域", //是否开启跨域
	"modeRouterStrict": "默认false,必须，路由严格模式false,为大小写忽略必须匹配，true必须大小写匹配",                            //路由严格模式/a/b/c
	"sessionName":      "默认HOTIME，必须，设置session的cookie名",
	"port":             "默认80，必须，web服务开启Http端口，0为不启用http服务,默认80",
	"tlsPort":          "默认空，非必须，web服务https端口，0为不启用https服务",
	"tlsKey":           "默认空，非必须，https密钥",
	"tlsCert":          "默认空，非必须，https证书",
}
