package utils

import (
	"fmt"
	beeLogger "github.com/beego/bee/v2/logger"
	"github.com/beego/beego/v2/server/web"
	"github.com/qiniu/qmgo"
	"strconv"
)

var (
	RunMode          string //运行模式
	MYSQL_URL        string //数据库连接
	MYSQL_URL_RDDP   string //数据库连接
	MYSQL_URL_EDB    string
	MYSQL_URL_DATA   string
	MYSQL_URL_GL     string
	MYSQL_LOG_URL    string
	MYSQL_WEEKLY_URL string //用户主库
	MgoUrlData       string // mongodb数据库连接配置

	REDIS_CACHE string //缓存地址
	//Rc          *cache.Cache //redis缓存
	Re            error        //redis错误
	Rc            RedisClient  //redis缓存
	MgoDataCli    *qmgo.Client // mongodb客户端连接
	MgoDataDbName string       // mongodb指标数据的库名
)

// 基础配置
var (
	STATIC_DIR       string
	DesKey           string // 接口返回加密KEY
	APPNAME          string //项目中文名称
	EmailSendToUsers string // 邮件提醒人员
	ResourceProxyUrl string // 代理资源地址
	RESOURCE_DIR     string
)

// 公共api内部服务调用
var (
	// EDB_LIB_URL 公共指标库
	EDB_LIB_URL         string
	APP_EDB_LIB_NAME_EN string
	EDB_LIB_Md5_KEY     string

	// PublicChartHost 公共图库的host
	PublicChartHost string

	// SendWxTemplateMsgUrl 模板消息推送
	SendWxTemplateMsgUrl string

	// SendTemplateMsgAuthorization 模板推送秘钥
	SendTemplateMsgAuthorization string

	// HandleVideoDecibelUrl 处理音频分贝的url
	HandleVideoDecibelUrl string

	// EnglishShareUrl 英文研报群发邮件分享地址
	EnglishShareUrl string

	// EnPolicyReportUrl 英文策略报告
	EnPolicyReportUrl string

	// GoogleTranslateUrl 谷歌翻译服务
	GoogleTranslateUrl string

	// AlarmMsgUrl 报警服务地址
	AlarmMsgUrl string

	EtaBridgeUrl       string // 桥接服务地址
	EtaBridgeAppNameEn string // 桥接服务英文名称-鉴权用
	EtaBridgeMd5Key    string // 桥接服务Md5密钥-鉴权用
	EtaBridgeDesKey    string // 桥接服务Des密钥-解密数据用
	EtaBridgeLoginUrl  string // 第三方登录鉴权接口地址
	EtaBridgeLogoutUrl string // 第三方登出接口地址
)

// TemplateIdByProduct 微信配置信息
var (
	TemplateIdByProduct string //产品运行报告通知-模板ID
	WxYbAppId           string // 研报小程序appid
	WxYbAppSecret       string // 研报小程序秘钥
)

// ES配置
var (
	ES_URL      string // ES服务器地址
	ES_USERNAME string // ES账号
	ES_PASSWORD string // ES密码
)

// ES索引配置
var (
	DATA_INDEX_NAME          string //数据指标库索引
	CHART_INDEX_NAME         string //研究图库索引
	EsReportIndexName        string //研报ES索引
	EsEnglishReportIndexName string //英文研报ES索引
	MY_CHART_INDEX_NAME      string //研究图库（MY ETA）索引
	SmartReportIndexName     string //智能研报ES索引
	EsExcelIndexName         string // 表格ES索引名称
	EsDataSourceIndexName    string // 数据源ES索引名称
)

// 科大讯飞--语音合成
var (
	XfHostUrl string
)

// 阿里云配置
var (
	Bucketname       string
	Endpoint         string
	Imghost          string
	UploadDir        string
	Upload_Audio_Dir string
	AccessKeyId      string
	AccessKeySecret  string
)

// 阿里云oss前端上传用
var (
	AliStsScheme       string
	RegionId           string
	RoleArn            string
	RoleSessionName    string
	RAMAccessKeyId     string
	RAMAccessKeySecret string
	STSTokenCacheKey   string
)

// 阿里云邮箱配置
var (
	AliyunEmailAccountName     string
	AliyunEmailAccessKeyId     string
	AliyunEmailAccessKeySecret string
)

// 腾讯云邮箱配置
var (
	TencentSDKSecretId           string // 腾讯云主账号SecretId
	TencentSDKSecretKey          string // 腾讯云主账号SecretKey
	TencentEmailFromEmailAddress string // 腾讯云邮件发信地址
	TencentEmailTemplateID       uint64 // 云邮件模板ID
)

// 日志配置
var (
	LogPath     string //调用过程中的日志存放地址
	LogFile     string
	LogDataPath string //调用过程中图表相关的日志存放地址
	LogDataFile string
	BinLogPath  string //数据库相关的日志存放地址
	BinLogFile  string
	ApiLogPath  string //接口请求地址和接口返回值日志存放地址
	ApiLogFile  string
	LogMaxDays  int //日志最大保留天数
)

// CrmEtaServerUrl CRM-ETA服务地址
var (
	CrmEtaServerUrl     string
	CrmEtaServerDes3Key string
)

// BusinessCode 商家编码
var BusinessCode string

// MinIo配置
var (
	MinIoBucketname       string
	MinIoEndpoint         string
	MinIoBackEndpoint     string
	MinIoImghost          string
	MinIoUploadDir        string
	MinIoUpload_Audio_Dir string
	MinIoAccessKeyId      string
	MinIoAccessKeySecret  string
	MinIoUseSSL           string
	MinIoPort             string
	MinIoRegion           string
)

// 对象存储客户端
var (
	ObjectStorageClient string // 目前有oss minio，默认oss
)

// S3配置
var (
	S3Endpoint        string
	S3BucketName      string
	S3UploadDir       string
	S3AccessKeyId     string
	S3AccessKeySecret string
	S3Host            string
	S3Region          string
	S3ForceStyle      string
	S3EndpointPort    string
	S3Protocol        string
)

// chrome配置
var (
	ChromePath string // chrome浏览器地址
)

var (
	UseMongo bool // 是否使用mongo
)

// eta_forum_hub ETA社区桥接服务地址
var (
	ETA_FORUM_HUB_URL     string
	ETA_FORUM_HUB_NAME_EN string
	ETA_FORUM_HUB_MD5_KEY string
)

func init() {
	tmpRunMode, err := web.AppConfig.String("run_mode")
	if err != nil {
		panic("配置文件读取run_mode错误 " + err.Error())
	}
	RunMode = tmpRunMode
	fmt.Println("RunMode:", RunMode)
	if RunMode == "" {
		localIp, err := GetLocalIP()
		fmt.Println("localIp:", localIp)
		if localIp == "10.0.0.123" {
			RunMode = "debug"
		} else {
			RunMode = "release"
		}
		fmt.Println("RunMode:", RunMode)
		configPath := `/home/code/config/eta_mobile/conf/app.conf`
		fmt.Println("configPath:", configPath)
		err = web.LoadAppConfig("ini", configPath)
		if err != nil {
			fmt.Println("web.LoadAppConfig Err:" + err.Error())
		}
	}

	config, err := web.AppConfig.GetSection(RunMode)
	if err != nil {
		panic("配置文件读取错误 " + err.Error())
	}
	beeLogger.Log.Info(RunMode + " 模式")
	MYSQL_URL = config["mysql_url"]
	MYSQL_URL_RDDP = config["mysql_url_rddp"]
	MYSQL_URL_EDB = config["mysql_url_edb"]
	MYSQL_URL_DATA = config["mysql_url_data"]
	MYSQL_URL_GL = config["mysql_url_gl"]
	MYSQL_LOG_URL = config["mysql_url_log"]
	MYSQL_WEEKLY_URL = config["mysql_url_weekly"]

	// mongodb数据库连接配置
	MgoUrlData = config["mgo_url_data"]

	REDIS_CACHE = config["beego_cache"]
	if len(REDIS_CACHE) <= 0 {
		panic("redis链接参数没有配置")
	}
	//Rc, Re = cache.NewCache(REDIS_CACHE) //初始化缓存
	//if Re != nil {
	//	fmt.Println(Re)
	//	panic(Re)
	//}
	// 初始化缓存
	redisClient, err := initRedis(config["redis_type"], config["beego_cache"])
	if err != nil {
		fmt.Println("redis链接异常：", err)
		panic(any(Re))
	}
	Rc = redisClient

	// 项目中文名称
	appNameCn, err := web.AppConfig.String("app_name_cn")
	if err != nil {
		panic(any("配置文件读取app_name_cn错误 " + err.Error()))
	}
	APPNAME = appNameCn

	// 初始化内部服务配置

	// 接口返回加密KEY
	DesKey = config["des_key"]

	// 邮件提醒人员
	EmailSendToUsers = config["email_send_to_users"]

	// 静态文件目录
	STATIC_DIR = config["static_dir"]

	// 代理资源地址
	ResourceProxyUrl = config["resource_proxy_url"]
	RESOURCE_DIR = config["resource_dir"]
	if RESOURCE_DIR == "" {
		RESOURCE_DIR = "eta/"
	}

	// 系统内部服务地址
	{
		// 公共指标库相关
		EDB_LIB_URL = config["edb_lib_url"]
		APP_EDB_LIB_NAME_EN = config["app_edb_lib_name_en"]
		EDB_LIB_Md5_KEY = config["edb_lib_md5_key"]

		// 图表项目域名
		PublicChartHost = config["public_chart_host"]

		// 发送微信模板消息地址
		SendWxTemplateMsgUrl = config["send_wx_template_msg_url"]

		// 发送微信模板消息地址
		SendTemplateMsgAuthorization = config["send_template_msg_authorization"]

		// 语音分贝处理的地址
		HandleVideoDecibelUrl = config["handle_video_decibel_url"]

		// 英文研报分享的地址
		EnglishShareUrl = config["english_share_url"]

		// 策略报告地址
		EnPolicyReportUrl = config["en_policy_report_url"]

		// 谷歌翻译服务地址
		GoogleTranslateUrl = config["google_translate_url"]

		// 报警服务地址
		AlarmMsgUrl = config["alarm_msg_url"]

		EtaBridgeUrl = config["eta_bridge_url"]               // 桥接服务地址
		EtaBridgeAppNameEn = config["eta_bridge_app_name_en"] // 桥接服务英文名称-鉴权用
		EtaBridgeMd5Key = config["eta_bridge_md5_key"]        // 桥接服务Md5密钥-鉴权用
		EtaBridgeDesKey = config["eta_bridge_des_key"]        // 桥接服务Des密钥-解密数据用
		EtaBridgeLoginUrl = config["eta_bridge_login_url"]    // eta桥接服务-登录接口地址
		EtaBridgeLogoutUrl = config["eta_bridge_logout_url"]  // eta桥接服务-登出接口地址
	}
	//日志配置
	{
		LogPath = config["log_path"]
		LogFile = config["log_file"]
		LogDataPath = config["log_data_path"]
		LogDataFile = config["log_data_file"]
		BinLogPath = config["binlog_path"]
		BinLogFile = config["binlog_file"]
		ApiLogPath = config["apilog_path"]
		ApiLogFile = config["apilog_file"]
		logMaxDaysStr := config["log_max_day"]
		LogMaxDays, _ = strconv.Atoi(logMaxDaysStr)
	}

	{
		CrmEtaServerUrl = config["crm_eta_server_url"]
		CrmEtaServerDes3Key = config["crm_eta_server_des3_key"]
	}
	// ES配置
	{
		ES_URL = config["es_url"]
		ES_USERNAME = config["es_username"]
		ES_PASSWORD = config["es_password"]
	}

	// ES 索引
	{
		DATA_INDEX_NAME = config["data_index_name"]
		CHART_INDEX_NAME = config["chart_index_name"]
		MY_CHART_INDEX_NAME = config["my_chart_index_name"]
		EsReportIndexName = config["es_report_index_name"]
		EsEnglishReportIndexName = config["es_english_report_index_name"]
		SmartReportIndexName = config["es_smart_report_index_name"]
	}

	// 微信相关
	{
		//模板消息
		TemplateIdByProduct = config["template_id_by_product"]
		WxYbAppId = config["wx_yb_appid"]          //弘则研报小程序
		WxYbAppSecret = config["wx_yb_app_secret"] // 研报小程序秘钥
	}

	// 对象存储客户端
	ObjectStorageClient = config["object_storage_client"]

	// OSS相关
	{
		Endpoint = config["endpoint"]
		Bucketname = config["bucket_name"]
		Imghost = config["img_host"]
		UploadDir = config["upload_dir"]
		Upload_Audio_Dir = config["upload_audio_dir"]
		AccessKeyId = config["access_key_id"]
		AccessKeySecret = config["access_key_secret"]
	}

	// OSS相关（前端使用）
	{
		AliStsScheme = config["ali_sts_scheme"]
		RegionId = config["region_id"]
		RoleArn = config["role_arn"]
		RoleSessionName = config["role_session_name"]
		RAMAccessKeyId = config["ram_access_key_id"]
		RAMAccessKeySecret = config["ram_access_key_secret"]
		STSTokenCacheKey = config["sts_token_cache_key"]
	}

	// 阿里云邮箱配置
	{
		AliyunEmailAccountName = config["aliyun_email_account_name"]
		AliyunEmailAccessKeyId = config["aliyun_email_access_key_id"]
		AliyunEmailAccessKeySecret = config["aliyun_email_access_key_secret"]
	}

	// 腾讯云邮箱配置
	{
		TencentSDKSecretId = config["tencent_sdk_secret_id"]                      // 腾讯云主账号SecretId
		TencentSDKSecretKey = config["tencent_sdk_secret_key"]                    // 腾讯云主账号SecretKey
		TencentEmailFromEmailAddress = config["tencent_email_from_email_address"] // 腾讯云邮件发信地址

		tencentEmailTemplateIDtr := config["tencent_email_template_id"]
		if tencentEmailTemplateIDtr != `` {
			tmpTencentEmailTemplateID, err := strconv.Atoi(tencentEmailTemplateIDtr) //弘则研报来源
			if err != nil {
				panic(any("配置文件读取tencent_email_template_id错误 " + err.Error()))
			}
			TencentEmailTemplateID = uint64(tmpTencentEmailTemplateID)
		}
	}

	// 科大讯飞
	{
		XfHostUrl = config["xf_host_url"]
	}

	// MinIo相关
	{
		MinIoEndpoint = config["minio_endpoint"]
		MinIoBackEndpoint = config["minio_back_endpoint"]
		MinIoBucketname = config["minio_bucket_name"]
		MinIoImghost = config["minio_img_host"]
		MinIoUploadDir = config["minio_upload_dir"]
		MinIoUpload_Audio_Dir = config["minio_upload_audio_dir"]
		MinIoAccessKeyId = config["minio_access_key_id"]
		MinIoAccessKeySecret = config["minio_access_key_secret"]
		MinIoUseSSL = config["minio_use_ssl"]
		MinIoPort = config["minio_port"]
		MinIoRegion = config["minio_region"]
	}

	// S3-OSS相关
	{
		S3Endpoint = config["s3_endpoint"]
		S3BucketName = config["s3_bucket_name"]
		S3Host = config["s3_host"]
		S3AccessKeyId = config["s3_access_key_id"]
		S3AccessKeySecret = config["s3_access_key_secret"]
		S3UploadDir = config["s3_upload_dir"]
		S3Region = config["s3_region"]
		S3ForceStyle = config["s3_force_style"]
		S3EndpointPort = config["s3_endpoint_port"]
		S3Protocol = config["s3_protocol"]
	}

	// 商家编码
	BusinessCode = config["business_code"]

	// chrome配置
	ChromePath = config["chrome_path"]

	// eta_forum_hub ETA社区桥接服务地址
	{
		ETA_FORUM_HUB_URL = config["eta_forum_hub_url"]
		ETA_FORUM_HUB_NAME_EN = config["eta_forum_hub_name_en"]
		ETA_FORUM_HUB_MD5_KEY = config["eta_forum_hub_md5_key"]
	}
	// 初始化ES
	initEs()
}
