package models

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

type ReportAuthor struct {
	Id           int       `orm:"column(id)" description:"报告作者ID"`
	ReportAuthor string    `description:"报告作者名称"`
	AuthorType   int       `description:"类型，1：中文；2：英文"`
	Enable       int       `description:"是否启用，0：禁用，1：启用"`
	IsDelete     int       `description:"是否删除，0：未删除，1：已删除"`
	CreateTime   time.Time `description:"创建时间"`
	ModifyTime   time.Time `description:"更新时间"`
}

// GetReportAuthorList 获取报告作者列表
func GetReportAuthorList(condition string, pars []interface{}, startSize, pageSize int) (total int, items []*ReportAuthor, err error) {
	o := orm.NewOrmUsingDB("rddp")
	baseSql := `  report_author WHERE is_delete=0 `
	if condition != "" {
		baseSql += condition
	}

	totalSql := ` SELECT count(1) total FROM ` + baseSql
	err = o.Raw(totalSql, pars).QueryRow(&total)
	if err != nil {
		return
	}

	sql := ` SELECT * FROM ` + baseSql + ` ORDER BY id desc LIMIT ?,? `
	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
	return
}

// GetReportAuthorCount 获取报告作者列表数
func GetReportAuthorCount(condition string, pars []interface{}) (total int, err error) {
	o := orm.NewOrmUsingDB("rddp")

	totalSql := ` SELECT count(1) total FROM report_author WHERE 1=1 `
	if condition != "" {
		totalSql += condition
	}
	err = o.Raw(totalSql, pars).QueryRow(&total)
	return
}

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

// AddReportAuthorReq 新增报告作者请求体
type AddReportAuthorReq struct {
	Id         int    `description:"作者id"`
	AuthorType int    `description:"类型，1：中文；2：英文"`
	Author     string `description:"报告作者名称"`
}

// GetReportAuthorById 根据作者id获取数据
func GetReportAuthorById(authorId int) (item *ReportAuthor, err error) {
	o := orm.NewOrmUsingDB("rddp")
	sql := `SELECT * FROM report_author WHERE is_delete=0 AND id = ? `
	err = o.Raw(sql, authorId).QueryRow(&item)
	return
}

// GetReportAuthorByAuthor 根据作者名称获取数据
func GetReportAuthorByAuthor(title string, authorType int) (item *ReportAuthor, err error) {
	o := orm.NewOrmUsingDB("rddp")
	sql := `SELECT * FROM report_author WHERE is_delete=0 AND report_author=? AND author_type = ? `
	err = o.Raw(sql, title, authorType).QueryRow(&item)
	return
}

// GetReportAuthorByAuthorAndId 根据作者名称和作者id获取数据
func GetReportAuthorByAuthorAndId(title string, authorType, authorId int) (item *ReportAuthor, err error) {
	o := orm.NewOrmUsingDB("rddp")
	sql := `SELECT * FROM report_author WHERE is_delete=0 AND report_author=? AND author_type = ? AND id != ? `
	err = o.Raw(sql, title, authorType, authorId).QueryRow(&item)
	return
}

// AddReportAuthor 新增作者
func AddReportAuthor(item *ReportAuthor) (lastId int64, err error) {
	o := orm.NewOrmUsingDB("rddp")
	lastId, err = o.Insert(item)
	return
}

// Update 更新作者基础信息
func (item *ReportAuthor) Update(cols []string) (err error) {
	o := orm.NewOrmUsingDB("rddp")
	_, err = o.Update(item, cols...)
	return
}

// EnableReportAuthorReq 启用/禁用报告作者请求体
type EnableReportAuthorReq struct {
	Id         int `description:"作者id"`
	EnableType int `description:"是否启用，0：禁用，1：启用"`
}

// DeleteReportAuthorReq 删除报告作者请求体
type DeleteReportAuthorReq struct {
	Id int `description:"作者id"`
}
