package utils

import (
	"fmt"
	beeLogger "github.com/beego/bee/v2/logger"
	"github.com/beego/beego/v2/server/web"
	"go.mongodb.org/mongo-driver/mongo"
	"strconv"
)

var (
	RunMode       string //运行模式
	APP_NAME_CN   string
	MYSQL_URL     string        //数据库连接
	Re            error         //redis错误
	Rc            RedisClient   //redis缓存
	MgoUrlData    string        // mongodb数据库连接配置
	MgoDataCli    *mongo.Client // mongodb客户端连接
	MgoDataDbName string        // mongodb指标数据的库名
)

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

// ES索引配置
var (
	DATA_INDEX_NAME          string //数据指标库索引
	CHART_INDEX_NAME         string //研究图库索引
	CHART_COLLECT_INDEX_NAME string
)

// 弘则
const (
	APPID  = "SJCrpOPvagscPxEv"
	SECRET = "gLLjT72uFHQZEFtaFCuoZegD1z2ezfyX"
)

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

// 基础配置
var (
	DesKey string // 接口返回加密KEY
)

// AlarmMsgUrl 报警服务地址
var AlarmMsgUrl string

var STATIC_DIR string

// 对象存储客户端
var (
	ObjectStorageClient string // 目前有oss minio,默认oss
	ResourceProxyUrl    string
	RESOURCE_DIR        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
)

// 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
	MinIoFileDownloadHost string
)

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

// 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_forum_admin/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 + " 模式")
	// 项目中文名称
	appNameCn, err := web.AppConfig.String("app_name_cn")
	if err != nil {
		panic(any("配置文件读取app_name_cn错误 " + err.Error()))
	}
	APP_NAME_CN = appNameCn
	MYSQL_URL = config["mysql_url"]
	// mongodb数据库连接配置
	MgoUrlData = config["mgo_url_data"]
	//日志配置
	{
		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)
	}
	// 接口返回加密KEY
	DesKey = config["des_key"]
	{
		// 报警服务地址
		AlarmMsgUrl = config["alarm_msg_url"]

	}

	// 初始化缓存
	redisClient, err := initRedis(config["redis_type"], config["beego_cache"])
	if err != nil {
		fmt.Println("redis链接异常:", err)
		panic(any(Re))
	}

	Rc = redisClient

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

	// 初始化ES
	initEs()

	// ES 索引
	{
		DATA_INDEX_NAME = config["data_index_name"]
		CHART_INDEX_NAME = config["chart_index_name"]
		CHART_COLLECT_INDEX_NAME = config["chart_collect_index_name"]
	}

	// 静态文件目录
	STATIC_DIR = config["static_dir"]
	if STATIC_DIR == "" {
		// 静态文件目录
		STATIC_DIR = "static"
	}

	{
		// 对象存储客户端
		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"]
		}

		// 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"]
			MinIoFileDownloadHost = config["minio_file_download_host"]
		}

		// S3-OSS相关
		{
			S3Endpoint = config["s3_endpoint"]
			S3BackEndpoint = config["s3_back_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"]
			S3DisableSSL = config["s3_disable_ssl"]
			S3OpenAcl = config["s3_open_acl"]
		}
		// 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"]
		}
	}
}

//修改接口文档
//http://8.136.199.33:8300/swagger/