package models

import (
	_ "github.com/go-sql-driver/mysql"
	"hongze/hz_eta_api/models/aimod"
	"hongze/hz_eta_api/models/company"
	"hongze/hz_eta_api/models/company_user"
	"hongze/hz_eta_api/models/data_manage"
	future_good2 "hongze/hz_eta_api/models/data_manage/future_good"
	"hongze/hz_eta_api/models/data_manage/supply_analysis"
	"hongze/hz_eta_api/models/ppt_english"
	"hongze/hz_eta_api/models/sandbox"
	"hongze/hz_eta_api/models/semantic_analysis"
	"hongze/hz_eta_api/models/system"
	"hongze/hz_eta_api/models/yb"
	"hongze/hz_eta_api/utils"
	"time"

	"github.com/beego/beego/v2/client/orm"
)

func init() {

	_ = orm.RegisterDataBase("default", "mysql", utils.MYSQL_URL)
	orm.SetMaxIdleConns("default", 50)
	orm.SetMaxOpenConns("default", 100)

	db, _ := orm.GetDB("default")
	db.SetConnMaxLifetime(10 * time.Minute)

	_ = orm.RegisterDataBase("rddp", "mysql", utils.MYSQL_URL_RDDP)
	orm.SetMaxIdleConns("rddp", 50)
	orm.SetMaxOpenConns("rddp", 100)

	report_db, _ := orm.GetDB("rddp")
	report_db.SetConnMaxLifetime(10 * time.Minute)

	_ = orm.RegisterDataBase("edb", "mysql", utils.MYSQL_URL_EDB)
	orm.SetMaxIdleConns("edb", 50)
	orm.SetMaxOpenConns("edb", 100)

	edb_db, _ := orm.GetDB("edb")
	edb_db.SetConnMaxLifetime(10 * time.Minute)

	_ = orm.RegisterDataBase("data", "mysql", utils.MYSQL_URL_DATA)
	orm.SetMaxIdleConns("data", 50)
	orm.SetMaxOpenConns("data", 100)

	data_db, _ := orm.GetDB("data")
	data_db.SetConnMaxLifetime(10 * time.Minute)

	_ = orm.RegisterDataBase("gl", "mysql", utils.MYSQL_URL_GL)
	orm.SetMaxIdleConns("gl", 50)
	orm.SetMaxOpenConns("gl", 100)

	gl, _ := orm.GetDB("gl")
	gl.SetConnMaxLifetime(10 * time.Minute)

	orm.Debug = true
	orm.DebugLog = orm.NewLog(utils.Binlog)

	//注册对象
	orm.RegisterModel(
		new(Classify),
		new(Resource),
		new(OssSTSToken),
		new(PptV2),
		new(PptV2PublishRecord),
		new(PptV2SaveLog),
		new(PptV2Group),
		new(PptV2GroupMapping),
		new(PptV2Grant),                 //ppt授权操作表
		new(VarietyClassify),            // 标签分类表
		new(VarietyTag),                 // 标签表
		new(ResearchVarietyTagRelation), // 研究员标签关系表
		new(ReportPptImg),               //Ppt转报告的图片记录表
	)

	// 系统表 数据表
	initSystem()

	// 客户相关
	initCompany()

	// 联系人相关
	initWxUser()

	// 报告相关 数据表
	initReport()

	// 研报相关
	initYb()

	// 注册Edb沙盘 数据表
	initSandbox()

	// 上海指标服务 数据表
	initShEdbData()

	// 指标服务 数据表
	initEdbData()

	// 图表 数据表
	initChart()
	// 英文报告
	initEnglishReport()

	// 英文ppt
	initPptEnglish()

	// 期货数据库
	initFutureGood()

	// 共享网盘
	initCloudDisk()

	// 语义分析
	initSemanticAnalysis()

	// 供应分析
	initSupplyAnalysis()

	//多图配置
	initMultipleGraphConfig()

	//AI 聊天记录
	initAiChat()
}

// initSystem 系统表 数据表
func initSystem() {
	orm.RegisterModel(
		new(system.SysUserLoginRecord),
		new(system.SysSession),
		new(system.SysDepartment),
		new(system.SysGroup),
		new(system.SysRoleMenu),
		new(system.Admin),
		new(system.SysRole),
		new(system.SysMenuButton),
		new(system.SysRoleButton),
		new(system.ResearchGroup),         // 研究员研究方向分组表
		new(system.ResearchGroupRelation), // 研究员研究方向分组关系表
		new(system.SysRoleAdmin),          //管理员账号和角色映射表
		new(system.AdminConfig),           //系统用户配置表
		new(system.AdminOperateRecord),
	)
}

// initCompany 客户相关 数据表
func initCompany() {
	orm.RegisterModel(
		new(company.CompanyApprovalMessage),
		new(company.CompanyOperationRecord),
		new(company.Company),
		new(company.CompanyLog),
		new(company.CompanyProductUpdateLog),                 //客户产品变更状态表
		new(company.CompanyProductTryOutUpdateLog),           //客户产品试用变更状态表
		new(company.CompanyProductTryOutUpdatePermissionLog), //客户产品试用变更品种详情表
		new(company.WxUserOpLog),                             //联系人日志记录表
		new(company.SellerCompanyPermission),                 //销售客户权限("添加客户"权限)
		new(company.CompanyServiceRecord),                    // 客户服务记录表
	)
}

// initWxUser 联系人相关 数据表
func initWxUser() {
	orm.RegisterModel(
		new(WxUser),
		new(UserSellerRelation),
		new(UserRecord),
		new(company_user.ChartClassifyPermission),                   // 联系人图表权限表
		new(company_user.CompanyUserChartPermissionOperationRecord), // 联系人图表权限操作记录表
	)
}

// initReport 报告相关 数据表
func initReport() {
	orm.RegisterModel(
		new(Report),
		new(ReportViewRecord),
		new(ResearchReport),                      //日报、周报信息
		new(ChartPermissionSearchKeyWordMapping), //报告分类权限表
		new(ReportChapter),                       // 报告章节表
		new(ReportChapterTicker),                 // 晨报章节ticker
		new(ReportChapterTypePermission),         // 晨周报章节类型权限表
		new(GroupSendMsg),                        //群发消息
		new(UserTemplateRecord),                  //模板消息记录
		new(ChartPermission),                     // 权限表
		new(YbPcSuncode),
		new(YbSuncodePars),
		new(ReportAuthor),                  //报告作者
		new(ClassifyMenu),                  // 报告分类-子目录表
		new(ClassifyMenuRelation),          // 报告分类-子目录关联表
		new(ChartPermissionChapterMapping), // 权限mapping表
		new(ReportChapterType),             // 报告章节类型表
	)
}

// initYb 研报 数据表
func initYb() {
	orm.RegisterModel(
		new(yb.PriceDriven),              // 价格驱动表
		new(yb.PriceDrivenSaveLog),       // 价格驱动保存记录表
		new(yb.PriceDrivenTag),           // 价格驱动标签表
		new(yb.CommunityQuestionProcess), // 研报问答社区流程表
	)
}

// initSandbox 注册Edb沙盘 数据表
func initSandbox() {
	//注册对象
	orm.RegisterModel(
		new(sandbox.Sandbox),        //沙盘主表
		new(sandbox.SandboxVersion), //沙盘版本表
		new(sandbox.SandboxDraft),   //沙盘草稿表
	)
}

// initShEdbData 上海服务器指标 数据表
func initShEdbData() {
	orm.RegisterModel(
		new(Edbdata),
		new(EdbdataDeleteRecord),
		new(EdbdataImportFail),
		new(EdbImportFail),                   //指标导入失败数据表
		new(Edbinfo),                         //edb库的edbinfo表
		new(data_manage.ExcelStyle),          //在线excel样式表
		new(data_manage.ExcelEdbdataMapping), //excel样式和指标映射表
	)
}

// initEdbData 指标服务 数据表
func initEdbData() {
	orm.RegisterModel(
		new(data_manage.EdbClassify),
		new(data_manage.EdbInfo), //hz_data库的edb_info表
		new(data_manage.EdbDataThs),
		new(data_manage.EdbDataWind),
		new(data_manage.EdbDataPb),
		new(data_manage.ManualUserClassify),
		new(data_manage.EdbdataClassify),
		new(data_manage.ManualUser),
		new(data_manage.EdbInfoCalculate),
		new(data_manage.EdbDataCalculate),
		new(data_manage.EdbInfoCalculateLjzzy),
		new(data_manage.EdbInfoCalculateTbz),
		new(data_manage.EdbInfoCalculateTcz),
		new(data_manage.EdbInfoCalculateNszydpjjs),
		new(data_manage.SearchKeyword),
		new(data_manage.EdbInfoCalculateHbz),
		new(data_manage.EdbInfoCalculateHcz),
		new(data_manage.EdbInfoCalculateBp),
		new(data_manage.BaseFromSmm),
		new(data_manage.BaseFromSmmIndex),
		new(data_manage.BaseFromSmmData),
		new(data_manage.BaseFromSmmClassify),
		new(data_manage.EdbInfoLog),
		new(data_manage.EdbInfoCalculateMapping),
		new(data_manage.EdbDataCalculateZjpj),            //直接拼接
		new(data_manage.EdbDataCalculateLjztbpj),         //累计同比值拼接
		new(data_manage.ExcelClassify),                   //ETA excel表格分类
		new(data_manage.ExcelInfo),                       //ETA excel表格
		new(data_manage.ExcelDraft),                      //ETA excel表格草稿
		new(data_manage.PredictEdbConf),                  //预测指标配置
		new(data_manage.BaseFromMysteelChemicalClassify), //预测指标配置
		new(data_manage.BaseFromMysteelChemicalIndex),    //钢联化工
		new(data_manage.BaseFromEiaSteoClassify),         // Eia steo 报告指标
		new(data_manage.BaseFromEiaSteoIndex),            // Eia steo 报告指标分类
		new(data_manage.PredictEdbRuleData),              //预测指标,动态规则的计算数据
		new(data_manage.ComTradeCountry),                 //联合国商品贸易数据库的国家编码表
		new(data_manage.ComTradeData),                    //联合国商品贸易数据表
		new(data_manage.BaseFromSci),
		new(data_manage.BaseFromSciIndex),
		new(data_manage.BaseFromSciData),
		new(data_manage.BaseFromSciClassify),
		new(data_manage.TradePositionDalianTop),
		new(data_manage.TradePositionZhengzhouTop),
		new(data_manage.TradePositionCffexTop),
		new(data_manage.TradePositionShanghaiTop),
		new(data_manage.TradePositionIneTop),
		new(data_manage.BaseFromBaiinfo),
		new(data_manage.BaseFromBaiinfoIndex),
		new(data_manage.BaseFromBaiinfoData),
		new(data_manage.BaseFromBaiinfoClassify),
		new(data_manage.EdbDataInsertConfig),      // 指标数据插入配置表
		new(data_manage.EdbInfoNoPermissionAdmin), //指标不可见用户配置表
	)
}

// initChart 图表 数据表
func initChart() {
	orm.RegisterModel(
		new(data_manage.ChartClassify),
		new(data_manage.ChartInfo),
		new(data_manage.ChartEdbMapping),
		new(data_manage.MyChartClassify),
		new(data_manage.MyChart),
		new(data_manage.MyChartLog),
		new(data_manage.MyChartClassifyMapping),
		new(data_manage.ChartInfoLog),
		new(data_manage.ChartInfoCorrelation),
	)
}

// initEnglishReport 英文报告
func initEnglishReport() {
	orm.RegisterModel(
		new(EnglishReport),
		new(EnglishPolicyReport),
		new(EnglishReportEmail),
		new(EnglishReportEmailPV),
		new(EnglishReportEmailLog),
		new(EnglishClassify),
		new(EnglishCompany),           // 英文客户
		new(EnglishCompanyLog),        // 英文客户操作日志
		new(EnglishReportEmailOpLog),  // 英文联系人操作日志
		new(EnglishCompanyTodo),       // 英文客户TODO任务
		new(EnglishCompanyTodoPublic), // 英文客户公共TODO任务
		new(EnglishVideoCover),        // 英文研报线上路演视频封面
		new(EnglishVideo),             // 英文研报线上路演
		new(EnPermission),             // 英文品种权限表
		new(EnCompanyPermission),      // 英文客户品种权限关联表
		new(EnClassifyPermission),     // 英文分类品种权限关联表
	)
}

// initPptEnglish ppt英文
func initPptEnglish() {
	orm.RegisterModel(
		new(ppt_english.PptEnglish),
		new(ppt_english.PptEnglishPublishRecord),
		new(ppt_english.PptEnglishSaveLog),
		new(ppt_english.PptEnglishGroup),
		new(ppt_english.PptEnglishGroupMapping),
		new(ppt_english.PptEnglishGrant),     //ppt授权操作表
		new(ppt_english.ReportPptEnglishImg), //Ppt转报告的图片记录表
	)
}

// initFutureGood 注册期货数据 数据表
func initFutureGood() {
	//注册对象
	orm.RegisterModel(
		new(future_good2.FutureGoodEdbInfo), //期货指标表
		new(future_good2.FutureGoodEdbData), //期货指标数据表
		//new(future_good2.FutureGoodChartClassify), //期货指标分类表
		new(future_good2.ChartInfoFutureGoodProfit), //期货利润图的扩展表
	)
}

// initCloudDisk 共享云盘
func initCloudDisk() {
	//注册对象
	orm.RegisterModel(
		new(CloudDiskMenu),     // 云盘目录表
		new(CloudDiskResource), // 云盘资源表
	)
}

// initSemanticAnalysis 语义分析
func initSemanticAnalysis() {
	orm.RegisterModel(
		new(semantic_analysis.SaLabel),                // 语义分析-标签表
		new(semantic_analysis.SaDocClassify),          // 语义分析-文档分类表
		new(semantic_analysis.SaDoc),                  // 语义分析-文档表
		new(semantic_analysis.SaDocSection),           // 语义分析-文档段落表
		new(semantic_analysis.SaCompareClassify),      // 语义分析-比对分类表
		new(semantic_analysis.SaCompare),              // 语义分析-比对表
		new(semantic_analysis.SaCompareDoc),           // 语义分析-比对关联文档表
		new(semantic_analysis.SaCompareLabel),         // 语义分析-比对段落表
		new(semantic_analysis.SaCompareSearchKeyword), // 语义分析-比对搜索关键词
	)
}

// initSupplyAnalysis 供应分析
func initSupplyAnalysis() {
	orm.RegisterModel(
		new(supply_analysis.Variety),
		new(supply_analysis.VarietyAdminPermission),
		new(supply_analysis.VarietyEdbInfo),
		new(supply_analysis.VarietyPlant),
	)
}

// initMultipleGraphConfig 多图配置 数据表
func initMultipleGraphConfig() {
	//注册对象
	orm.RegisterModel(
		new(data_manage.MultipleGraphConfig),             //多图配置表
		new(data_manage.MultipleGraphConfigChartMapping), //图表与多图配置的关系表
		new(data_manage.MultipleGraphConfigEdbMapping),   //指标与多图配置的关系表
	)
}

func initAiChat() {
	//注册对象
	orm.RegisterModel(
		new(aimod.AiChatTopic), //主题
		new(aimod.AiChat),      //聊天
	)
}