package models

import (
	"eta/eta_api/utils"
	"github.com/beego/beego/v2/client/orm"
	"github.com/rdlucklib/rdluck_tools/paging"
	"strings"
	"time"
)

// 英文策略报告
type EnglishPolicyReport 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:"频度"`
	CreateTime         time.Time `description:"创建时间"`
	ModifyTime         time.Time `description:"修改时间"`
	State              int       `description:"1:未同步,2:已同步"`
	SyncTime           time.Time `description:"同步时间"`
	PublishStatus      int       `description:"1:未发布,2:已发布"`
	PublishTime        time.Time `description:"发布时间"`
	Content            string    `description:"内容"`
	KeyTakeaways       string    `description:"关键点"`
	AuthorMobile       string    `description:"创建者手机号"`
	SyncReportId       int       `description:"同步后的report_id为english_report的ID"`
	SourceReportId     int       `description:"原始报告ID"`
	ReportCoverUrl     string    `description:"原始报告封面图"`
}

// AddEnglishPolicyReportMulti 批量新增report
func AddEnglishPolicyReportMulti(list []*EnglishPolicyReport) (err error) {
	o := orm.NewOrmUsingDB("rddp")
	_, err = o.InsertMulti(len(list), list)
	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:"频度"`
	//CreateTime         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"`
	//SourceReportId     int    `description:"原始报告ID"`
	ReportCoverUrl string `description:"原始报告封面图"`
}

func GetEnglishPolicyReportById(reportId int) (item *EnglishPolicyReportDetail, err error) {
	o := orm.NewOrmUsingDB("rddp")
	sql := `SELECT * FROM english_policy_report WHERE id=?`
	err = o.Raw(sql, reportId).QueryRow(&item)
	return
}

func GetEnglishPolicyReportBySourceReportId(sourceReportId int) (item *EnglishPolicyReport, err error) {
	o := orm.NewOrmUsingDB("rddp")
	sql := `SELECT * FROM english_policy_report WHERE source_report_id = ? LIMIT 1`
	err = o.Raw(sql, sourceReportId).QueryRow(&item)
	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:"频度"`
	//CreateTime         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"`
	//SourceReportId     int       `description:"原始报告ID"`
	ReportCoverUrl string `description:"原始报告封面图"`
}

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

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

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

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

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

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

// 同步报告
func SyncEnglishPolicyReportById(id, newReportId int) (err error) {
	o := orm.NewOrmUsingDB("rddp")
	sql := `UPDATE english_policy_report SET state=2, sync_time=now(),modify_time=NOW(), sync_report_id=? WHERE id = ? `
	_, err = o.Raw(sql, newReportId, id).Exec()
	return
}

// 设置策略报告内容
func SetEnglishPolicyReportContentBySourceReportId(sourceReportId int, content string) (err error) {
	o := orm.NewOrmUsingDB("rddp")
	sql := `UPDATE english_policy_report SET content=?, modify_time=NOW() WHERE source_report_id = ? `
	_, err = o.Raw(sql, content, sourceReportId).Exec()
	return
}

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

// 删除报告
func DeleteEnglishPolicyReport(reportIds int) (err error) {
	o := orm.NewOrmUsingDB("rddp")
	sql := ` DELETE FROM english_policy_report WHERE id =? `
	_, err = o.Raw(sql, reportIds).Exec()
	return
}

// Update 更新
func (item *EnglishPolicyReport) Update(cols []string) (err error) {
	o := orm.NewOrmUsingDB("rddp")
	_, err = o.Update(item, cols...)
	return
}

// GetEnglishPolicyReportByIds 根据IDs获取英文报告列表
func GetEnglishPolicyReportByIds(reportIds []int, fieldArr []string) (list []*EnglishPolicyReport, err error) {
	listLen := len(reportIds)
	if listLen == 0 {
		return
	}
	fields := ` * `
	if len(fieldArr) > 0 {
		fields = strings.Join(fieldArr, ",")
	}
	o := orm.NewOrmUsingDB("rddp")
	sql := `SELECT ` + fields + ` FROM english_policy_report WHERE id IN (` + utils.GetOrmInReplace(listLen) + `)`
	_, err = o.Raw(sql, reportIds).QueryRows(&list)
	return
}