package models

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

type CygxYanxuanSpecialAuthor struct {
	Id           int       `orm:"column(id);pk"`
	UserId       int       // 用户ID
	SpecialName  string    // 专栏名称
	Introduction string    // 介绍
	Label        string    // 标签
	NickName     string    // 昵称
	RealName     string    // 姓名
	Mobile       string    // 手机号
	CreateTime   time.Time // 创建时间
	ModifyTime   time.Time // 修改时间
	HeadImg      string    // 头像
	BgImg        string    // 背景图
	Status       int       // 1启用2禁用
}

type CygxYanxuanSpecialAuthorItem struct {
	Id                int       `orm:"column(id);pk"`
	UserId            int       // 用户ID
	SpecialName       string    // 专栏名称
	Introduction      string    // 介绍
	Label             string    // 标签
	NickName          string    // 昵称
	RealName          string    // 姓名
	CompanyName       string    // 公司名
	Mobile            string    // 手机号
	CreateTime        string    // 创建时间
	ModifyTime        time.Time // 修改时间
	HeadImg           string    // 头像
	BgImg             string    // 背景图
	BgImgPc           string    // 背景图
	Status            int       // 1启用2禁用
	CollectNum        int       // 被收藏数
	FollowNum         int       // 被关注数
	SpecialArticleNum int       // 文章数
	LatestPublishTime time.Time // 最近更新时间
	LatestPublishDate string    // 最近更新时间
	IsFollow          int       // 是否已关注 1已关注 0 未关注
	//YanxuanSpecialCenter *CygxYanxuanSpecialCenterAuthorResp // 研选专栏文章内容
}

type CygxYanxuanSpecialCenterAuthorResp struct {
	Id          int    //研选专栏ID
	UserId      int    // 用户ID
	PublishTime string // 提审过审或驳回时间
	Title       string // 标题
}

func AddCygxYanxuanSpecialAuthor(item *CygxYanxuanSpecialAuthor) (lastId int64, err error) {
	o := orm.NewOrm()
	lastId, err = o.Insert(item)
	return
}

type EnableCygxYanxuanSpecialAuthorReq struct {
	UserId int // 用户ID
	Status int // 1启用2禁用
}

// 启用禁用作者
func EnableYanxuanSpecialAuthor(userId, status int) (err error) {
	o := orm.NewOrm()
	sql := ``
	sql = `UPDATE cygx_yanxuan_special_author SET status=?,modify_time=NOW() WHERE user_id = ? `
	_, err = o.Raw(sql, status, userId).Exec()
	return
}

func GetYanxuanSpecialAuthor(reqUserId, sysUserId int, cond string) (item *CygxYanxuanSpecialAuthorItem, err error) {
	o := orm.NewOrm()
	sql := ``
	sql = `SELECT
	a.*,
	( SELECT count( 1 ) FROM cygx_yanxuan_special_collect AS ac  INNER JOIN cygx_yanxuan_special as cs ON  ac.yanxuan_special_id = cs.id  WHERE cs.user_id = a.user_id  ) AS collect_num,
	( SELECT count( 1 ) FROM cygx_yanxuan_special_follow AS cf  WHERE cf.follow_user_id = a.user_id  ) AS follow_num,
	( SELECT count( 1 ) FROM cygx_yanxuan_special AS ca  WHERE ca.user_id = a.user_id AND ca.status = 3 ) AS special_article_num,
	( SELECT count( 1 ) FROM cygx_yanxuan_special_follow AS cf  WHERE cf.follow_user_id =? AND cf.user_id = ?  ) AS is_follow 
FROM
	cygx_yanxuan_special_author as a WHERE a.user_id=? `
	if cond != "" {
		sql += cond
	}
	err = o.Raw(sql, reqUserId, sysUserId, reqUserId).QueryRow(&item)
	return
}

// 根据用户ID获取专栏详情
func GetCygxYanxuanSpecialAuthorByUserId(userId int) (item *CygxYanxuanSpecialAuthorItem, err error) {
	o := orm.NewOrm()
	sql := `SELECT * FROM cygx_yanxuan_special_author  WHERE user_id = ? `
	err = o.Raw(sql, userId).QueryRow(&item)
	return
}

func GetYanxuanSpecialAuthorBySpecialColumnId(specialColumnId, sysUserId int) (item *CygxYanxuanSpecialAuthorItem, err error) {
	o := orm.NewOrm()
	sql := ``
	sql = `SELECT
	a.*,
	( SELECT count( 1 ) FROM cygx_yanxuan_special_collect AS ac  INNER JOIN cygx_yanxuan_special as cs ON  ac.yanxuan_special_id = cs.id  WHERE cs.user_id = a.user_id  ) AS collect_num,
	( SELECT count( 1 ) FROM cygx_yanxuan_special_follow AS cf  WHERE cf.follow_user_id = a.user_id  ) AS follow_num,
	( SELECT count( 1 ) FROM cygx_yanxuan_special AS ca  WHERE ca.user_id = a.user_id AND ca.status = 3 ) AS special_article_num,
	( SELECT count( 1 ) FROM cygx_yanxuan_special_follow AS cf  INNER JOIN cygx_yanxuan_special_author AS ca ON cf.follow_user_id=ca.user_id 
	WHERE cf.user_id = ? AND ca.id = ? ) AS is_follow 
FROM
	cygx_yanxuan_special_author as a
	 WHERE a.id=? `
	err = o.Raw(sql, sysUserId, specialColumnId, specialColumnId).QueryRow(&item)
	return
}

// 获取数量
func GetCygxYanxuanSpecialAuthorCount(condition string, pars []interface{}) (count int, err error) {
	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_yanxuan_special_author as  a  WHERE 1= 1  `
	if condition != "" {
		sqlCount += condition
	}
	o := orm.NewOrm()
	err = o.Raw(sqlCount, pars).QueryRow(&count)
	return
}

type SaveCygxYanxuanSpecialAuthorReq struct {
	SpecialColumnId int    // 专栏栏目ID
	SpecialName     string // 专栏名称
	Introduction    string // 介绍
	Label           string // 标签
	NickName        string // 昵称
	BgImg           string // 背景图
}

func UpdateYanxuanSpecialAuthor(item *CygxYanxuanSpecialAuthor) (err error) {
	o := orm.NewOrm()
	sql := ``
	sql = `UPDATE cygx_yanxuan_special_author SET special_name=?,introduction=?,label=?,nick_name=?
	,modify_time=NOW() WHERE id = ? `
	_, err = o.Raw(sql, item.SpecialName, item.Introduction, item.Label, item.NickName, item.Id).Exec()
	return
}

func GetYanxuanSpecialAuthorList(conditionUserSort, condition string, pars []interface{}, startSize, pageSize int) (items []*CygxYanxuanSpecialAuthorItem, err error) {
	o := orm.NewOrm()
	sql := ``
	sql = `SELECT ` + conditionUserSort +
		` a.*,
	IFNULL(( SELECT publish_time FROM cygx_yanxuan_special WHERE user_id = a.user_id AND STATUS = 3 ORDER BY publish_time DESC LIMIT 1 ), a.modify_time) AS latest_publish_time
FROM
	cygx_yanxuan_special_author AS a
WHERE 1= 1 `
	if condition != "" {
		sql += condition
	}
	sql += ` LIMIT ?,?  `
	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
	return
}

type SpecialAuthorListResp struct {
	Paging               *paging.PagingItem `description:"分页数据"`
	List                 []*CygxYanxuanSpecialAuthorItem
	IsAuthor             bool
	IsImproveInformation bool   `description:"作者信息是否完善"`
	HeadImg              string // 头像
	SpecialColumnId      int    // 专栏栏目ID
}

type SpecialAuthorCheckResp struct {
	IsAuthor             bool
	IsImproveInformation bool   `description:"作者信息是否完善"`
	HeadImg              string // 头像
	SpecialColumnId      int    // 专栏栏目ID
}

type SaveCygxYanxuanSpecialAuthoHeadImgrReq struct {
	Paging          *paging.PagingItem `description:"分页数据"`
	SpecialColumnId int                // 专栏栏目ID
	HeadImg         string             // 头像
}

func UpdateYanxuanSpecialAuthorHeadImg(item *CygxYanxuanSpecialAuthor) (err error) {
	o := orm.NewOrm()
	sql := ``
	sql = `UPDATE cygx_yanxuan_special_author SET head_img=?,modify_time=NOW() WHERE id = ? `
	_, err = o.Raw(sql, item.HeadImg, item.Id).Exec()
	return
}

func GetYanxuanSpecialAuthorById(specialColumnId int) (item *CygxYanxuanSpecialAuthorItem, err error) {
	o := orm.NewOrm()
	sql := ``
	sql = `SELECT * FROM cygx_yanxuan_special_author WHERE id = ? `
	err = o.Raw(sql, specialColumnId).QueryRow(&item)
	return
}

// UpdateCygxYanxuanSpecialAuthorPv 修改研选专栏作者的阅读Pv
func UpdateCygxYanxuanSpecialAuthorPv(userId int) (err error) {
	o := orm.NewOrm()
	sql := ``
	sql = `UPDATE cygx_yanxuan_special_author SET pv=pv+1 WHERE user_id = ? `
	_, err = o.Raw(sql, userId).Exec()
	return
}

// UpdateCygxYanxuanSpecialAuthorUv 修改研选专栏作者的阅读Uv
func UpdateCygxYanxuanSpecialAuthorUv(userId int) (err error) {
	o := orm.NewOrm()
	sql := ``
	sql = `UPDATE cygx_yanxuan_special_author SET uv=uv+1 WHERE user_id = ? `
	_, err = o.Raw(sql, userId).Exec()
	return
}

// 增加收藏数量
func UpdateYanxuanSpecialAuthorArticleCollectNumIncrease(userId int) (err error) {
	o := orm.NewOrm()
	sql := ``
	sql = `UPDATE cygx_yanxuan_special_author SET article_collect_num = article_collect_num +1  WHERE id = ? `
	_, err = o.Raw(sql, userId).Exec()
	return
}

// 减少收藏数量
func UpdateYanxuanSpecialAuthorArticleCollectNumReduce(userId int) (err error) {
	o := orm.NewOrm()
	sql := ``
	sql = `UPDATE cygx_yanxuan_special_author SET article_collect_num = article_collect_num  - 1  WHERE id = ? `
	_, err = o.Raw(sql, userId).Exec()
	return
}

// 增加粉丝数量
func UpdateYanxuanSpecialAuthorFansNumIncrease(userId int) (err error) {
	o := orm.NewOrm()
	sql := ``
	sql = `UPDATE cygx_yanxuan_special_author SET fans_num = fans_num +1  WHERE id = ? `
	_, err = o.Raw(sql, userId).Exec()
	return
}

// 减少粉丝数量
func UpdateYanxuanSpecialAuthorFansNumReduce(userId int) (err error) {
	o := orm.NewOrm()
	sql := ``
	sql = `UPDATE cygx_yanxuan_special_author SET fans_num = fans_num  - 1  WHERE id = ? `
	_, err = o.Raw(sql, userId).Exec()
	return
}

// 更新收藏数量
func UpdateYanxuanSpecialAuthorArticleCollectNum(collectNum, userId int) (err error) {
	o := orm.NewOrm()
	sql := ``
	sql = `UPDATE cygx_yanxuan_special_author SET article_collect_num = ?  WHERE user_id = ? `
	_, err = o.Raw(sql, collectNum, userId).Exec()
	return
}

// 更新粉丝数量
func UpdateYanxuanSpecialAuthorFansNum(fansNum, userId int) (err error) {
	o := orm.NewOrm()
	sql := ``
	sql = `UPDATE cygx_yanxuan_special_author SET fans_num = ?  WHERE user_id = ? `
	_, err = o.Raw(sql, fansNum, userId).Exec()
	return
}

// 更新作者发布文章的数量
func UdpateYanxuanSpecialauthorArticleNum(articleNum, userId int) (err error) {
	o := orm.NewOrm()
	sql := ``
	sql = `UPDATE cygx_yanxuan_special_author SET article_num = ? ,article_publish_time = NOW(), modify_time = NOW()   WHERE user_id = ? `
	_, err = o.Raw(sql, articleNum, userId).Exec()
	return
}

// 更新作者分享到朋友圈的封面图片
func UpdateYanxuanSpecialauthorMomentsImg(momentsImg string, userId int) (err error) {
	o := orm.NewOrm()
	sql := `UPDATE cygx_yanxuan_special_author SET moments_img = ?  WHERE user_id = ? `
	_, err = o.Raw(sql, momentsImg, userId).Exec()
	return
}