package models

import (
	"eta_gn/eta_api/global"
	"eta_gn/eta_api/utils"
	"github.com/rdlucklib/rdluck_tools/paging"
	"time"
)

// 英文策略报告
type EnglishPolicyReport struct {
	Id                 int       `gorm:"column:id;primaryKey;auto_increment:true" description:"策略报告ID"`
	ClassifyIdFirst    int       `gorm:"column:classify_id_first" description:"一级分类ID"`
	ClassifyNameFirst  string    `gorm:"column:classify_name_first" description:"一级分类名称"`
	ClassifyIdSecond   int       `gorm:"column:classify_id_second" description:"二级分类ID"`
	ClassifyNameSecond string    `gorm:"column:classify_name_second" description:"二级分类名称"`
	Title              string    `gorm:"column:title" description:"标题"`
	Abstract           string    `gorm:"column:abstract" description:"摘要"`
	Author             string    `gorm:"column:author" description:"作者"`
	Frequency          string    `gorm:"column:frequency" description:"频度"`
	CreateTime         time.Time `gorm:"column:create_time" description:"创建时间"`
	ModifyTime         time.Time `gorm:"column:modify_time" description:"修改时间"`
	State              int       `gorm:"column:state" description:"1:未同步,2:已同步"`
	SyncTime           time.Time `gorm:"column:sync_time" description:"同步时间"`
	PublishStatus      int       `gorm:"column:publish_status" description:"1:未发布,2:已发布"`
	PublishTime        time.Time `gorm:"column:publish_time" description:"发布时间"`
	Content            string    `gorm:"column:content" description:"内容"`
	KeyTakeaways       string    `gorm:"column:key_takeaways" description:"关键点"`
	AuthorMobile       string    `gorm:"column:author_mobile" description:"创建者手机号"`
	SyncReportId       int       `gorm:"column:sync_report_id" description:"同步后的report_id为english_report的ID"`
	SourceReportId     int       `gorm:"column:source_report_id" description:"原始报告ID"`
	ReportCoverUrl     string    `gorm:"column:report_cover_url" description:"原始报告封面图"`
}

// AddEnglishPolicyReportMulti 批量新增report
func AddEnglishPolicyReportMulti(list []*EnglishPolicyReport) (err error) {
	err = global.DmSQL["rddp"].CreateInBatches(list, utils.MultiAddNum).Error
	return
}

type EnglishPolicyReportDetail struct {
	Id                 int    `description:"策略报告Id"`
	ClassifyIdFirst    int    `description:"一级分类id"`
	ClassifyNameFirst  string `description:"一级分类名称"`
	ClassifyIdSecond   int    `description:"二级分类id"`
	ClassifyNameSecond string `description:"二级分类名称"`
	Title              string `description:"标题"`
	Abstract           string `description:"摘要"`
	Author             string `description:"作者"`
	Frequency          string `description:"频度"`
	PublishTime        string `description:"发布时间"`
	ModifyTime         string `description:"修改时间"`
	State              int    `description:"同步状态:1:未同步,2:已同步"`
	SyncTime           string `description:"同步时间"`
	Content            string `description:"内容"`
	KeyTakeaways       string `description:"关键点"`
	AuthorMobile       string `description:"创建者手机号"`
	SyncReportId       int    `description:"同步后的report_id为english_report的ID"`
	ReportCoverUrl     string `description:"原始报告封面图"`
}

func GetEnglishPolicyReportById(reportId int) (item *EnglishPolicyReportDetail, err error) {
	sql := `SELECT * FROM english_policy_report WHERE id=?`
	err = global.DmSQL["rddp"].Raw(sql, reportId).First(&item).Error
	return
}

type EnglishPolicyReportList struct {
	Id                 int    `orm:"column(id);pk;auto" description:"策略报告Id"`
	ClassifyIdFirst    int    `description:"一级分类id"`
	ClassifyNameFirst  string `description:"一级分类名称"`
	ClassifyIdSecond   int    `description:"二级分类id"`
	ClassifyNameSecond string `description:"二级分类名称"`
	Title              string `description:"标题"`
	Abstract           string `description:"摘要"`
	Author             string `description:"作者"`
	Frequency          string `description:"频度"`
	PublishTime        string `description:"发布时间"`
	ModifyTime         string `description:"修改时间"`
	State              int    `description:"1:未同步,2:已同步"`
	SyncTime           string `description:"同步时间"`
	KeyTakeaways       string `description:"关键点"`
	AuthorMobile       string `description:"创建者手机号"`
	SyncReportId       int    `description:"同步后的report_id为english_report的ID"`
	ReportCoverUrl     string `description:"原始报告封面图"`
}

type EnglishPolicyReportListResp struct {
	List   []*EnglishPolicyReportList
	Paging *paging.PagingItem `description:"分页数据"`
}

func GetEnglishPolicyReportListCount(condition string, pars []interface{}) (count int, err error) {
	sql := `SELECT COUNT(1) AS count  FROM english_policy_report WHERE 1=1 `
	if condition != "" {
		sql += condition
	}
	err = global.DmSQL["rddp"].Raw(sql, pars...).Scan(&count).Error
	return
}

func GetEnglishPolicyReportList(condition string, pars []interface{}, startSize, pageSize int) (items []*EnglishPolicyReportList, err error) {
	//产品权限
	sql := `SELECT * 
        FROM english_policy_report WHERE 1=1  `
	if condition != "" {
		sql += condition
	}
	sql += `ORDER BY  publish_time DESC LIMIT ?,?`
	pars = append(pars, startSize)
	pars = append(pars, pageSize)
	err = global.DmSQL["rddp"].Raw(sql, pars...).Find(&items).Error
	return
}

func GetEnglishPolicyReportByCondition(condition string, pars []interface{}) (items []*EnglishPolicyReport, err error) {
	sql := `SELECT * 
        FROM english_policy_report WHERE 1=1  `
	if condition != "" {
		sql += condition
	}
	err = global.DmSQL["rddp"].Raw(sql, pars...).Find(&items).Error
	return
}

type SyncEnglishPolicyReq struct {
	Id int `description:"策略报告id"`
}

type PullEnglishPolicyDataResp struct {
	Num int `description:"成功获取的记录数"`
}

// 同步报告
func SyncEnglishPolicyReportById(id, newReportId int) (err error) {
	sql := `UPDATE english_policy_report SET state=2, sync_time=now(),modify_time=NOW(), sync_report_id=? WHERE id = ? `
	err = global.DmSQL["rddp"].Exec(sql, newReportId, id).Error
	return
}

// 设置策略报告内容
func SetEnglishPolicyReportContentBySourceReportId(sourceReportId int, content string) (err error) {
	sql := `UPDATE english_policy_report SET content=?, modify_time=NOW() WHERE source_report_id = ? `
	err = global.DmSQL["rddp"].Exec(sql, content, sourceReportId).Error
	return
}

// 取消发布报告
func SyncCancelEnglishPolicyReport(reportId int) (err error) {
	sql := ` UPDATE english_policy_report SET state=1,sync_time=null,modify_time=NOW(), sync_report_id=0 WHERE id =?  `
	err = global.DmSQL["rddp"].Exec(sql, reportId).Error
	return
}

// Update 更新
func (item *EnglishPolicyReport) Update(cols []string) (err error) {
	err = global.DmSQL["rddp"].Select(cols).Updates(item).Error
	return
}