package cygx

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

type CygxResearchSummary struct {
	ArticleId       int       `orm:"column(article_id);pk"description:"报告id"`
	Title           string    `description:"标题"`
	Department      string    `description:"作者"`
	Abstract        string    `description:"摘要"`
	PublishStatus   int       `description:"发布状态,1已发布,0未发布"`
	PublishDate     time.Time `description:"发布时间"`
	CreateTime      time.Time `description:"创建时间"`
	LastUpdatedTime time.Time `description:"最后一次更新时间"`
	Periods         string    `description:"期数"`
	HavePublish     int       `description:"是否发布过,1是,0否"`
	AdminId         int       `description:"销售/管理员ID"`
	AdminName       string    `description:"销售/管理员姓名"`
}

type CygxResearchSummaryRep struct {
	ArticleId       int    `orm:"column(article_id);pk"description:"报告id"`
	Title           string `description:"标题"`
	Department      string `description:"作者"`
	Abstract        string `description:"摘要"`
	PublishStatus   int    `description:"发布状态,1已发布,0未发布"`
	PublishDate     string `description:"发布时间"`
	CreateTime      string `description:"创建时间"`
	LastUpdatedTime string `description:"最后一次更新时间"`
	Periods         string `description:"期数"`
	HavePublish     int    `description:"是否发布过,1是,0否"`
	Pv              int    `description:"PV"`
	Uv              int    `description:"Uv"`
	AdminId         int    `description:"销售/管理员ID"`
	AdminName       string `description:"销售/管理员姓名"`
	VisibleRange    int    `description:"设置可见范围1全部,0内部"`
	IsSendWxMsg     int    `description:"是否推送过微信模版消息,1是,0否"`
}

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

type AddCygxResearchSummary struct {
	ArticleId   int               `description:"报告Id ,传0时新增,大于0时修改"`
	Title       string            `description:"标题"`
	Department  string            `description:"作者"`
	Abstract    string            `description:"摘要"`
	DoType      int               `description:"操作方式,1发布,0保存"`
	PublishDate string            `description:"发布时间"`
	Content     *CygxRSlFirstList `description:"内容"`
}

type DetailCygxResearchSummaryRep struct {
	ArticleId     int                          `description:"报告Id ,传0时新增,大于0时修改"`
	Title         string                       `description:"标题"`
	Department    string                       `description:"作者"`
	Abstract      string                       `description:"摘要"`
	PublishDate   string                       `description:"发布时间"`
	PublishStatus int                          `description:"发布状态,1已发布,0未发布"`
	SortSdbg      string                       `description:"深度报告排序"`
	ListSdbg      []*CygxRSlChartPermissionIco `description:"类型——’SDBG:深度报告片篇’"`
	SortCydyjy    string                       `description:"产业调研纪要排序"`
	ListCydyjy    []*CygxRSlChartPermissionIco `description:"类型——’CYDYJY:产业调研纪要’"`
	SortSjdp      string                       `description:"事件点评排序"`
	ListSsgs      []*CygxRSlChartPermissionIco `description:"类型——’SSGS:上市公司调研纪要篇’"`
	SortSsgs      string                       `description:"上市公司调研纪要篇排序"`
	ListSjdp      []*AddCygxResearchSummaryLog `description:"类型——’SJDP:事件点评"`
	SortBzchjh    string                       `description:"本周晨会精华排序"`
	ListBzchjh    []*CygxRSlChartPermissionIco `description:"类型——’BZCHJH:本周晨会精华’"`
	SortYanx      string                       `description:"研选排序"`
	ListYanx      []*CygxRSlChartPermissionIco `description:"类型——’YANX:研选’"`
}

type DetailCygxResearchSummaryTmpRep struct {
	Title       string                          `description:"标题"`
	Department  string                          `description:"作者"`
	Abstract    string                          `description:"摘要"`
	PublishDate string                          `description:"发布时间"`
	SortSdbg    string                          `description:"深度报告排序"`
	ListSdbg    []*CygxRSlChartPermissionIcoTmp `description:"类型——’SDBG:深度报告片篇’"`
	SortCydyjy  string                          `description:"产业调研纪要排序"`
	ListCydyjy  []*CygxRSlChartPermissionIcoTmp `description:"类型——’CYDYJY:产业调研纪要’"`
	SortSjdp    string                          `description:"事件点评排序"`
	ListSjdp    []*AddCygxResearchSummaryLog    `description:"类型——’SJDP:事件点评"`
	SortBzchjh  string                          `description:"本周晨会精华排序"`
	ListBzchjh  []*CygxRSlChartPermissionIcoTmp `description:"类型——’BZCHJH:本周晨会精华’"`
	SortSsgs    string                          `description:"上市公司调研纪要篇排序"`
	ListSsgs    []*CygxRSlChartPermissionIcoTmp `description:"类型——’SSGS:上市公司调研纪要篇’"`
	SortYanx    string                          `description:"研选排序"`
	ListYanx    []*CygxRSlChartPermissionIcoTmp `description:"类型——’YANX:研选’"`
}

type ResearchSummaryId struct {
	ArticleId int `description:"报告Id"`
}

// 添加
func AddCygxResearchSummaryOrm(itme *CygxResearchSummary, items []*CygxResearchSummaryLog) (newArtId int64, err error) {
	o := orm.NewOrm()
	to, err := o.Begin()
	if err != nil {
		return
	}
	defer func() {
		if err != nil {
			fmt.Println(err)
			_ = to.Rollback()
		} else {
			_ = to.Commit()
		}
	}()
	newArtId, err = to.Insert(itme)
	if err != nil {
		return
	}
	for _, v := range items {
		v.ArticleId = int(newArtId)
		_, err = to.Insert(v)
		if err != nil {
			return
		}
	}
	return
}

// 编辑
func UpdateCygxResearchSummaryOrm(item *CygxResearchSummary, items []*CygxResearchSummaryLog) (newId int64, err error) {
	o := orm.NewOrm()
	to, err := o.Begin()
	if err != nil {
		return
	}
	defer func() {
		if err != nil {
			fmt.Println(err)
			_ = to.Rollback()
		} else {
			_ = to.Commit()
		}
	}()
	articleId := item.ArticleId
	sql := `UPDATE cygx_research_summary SET title=?, department=? ,abstract = ?,publish_status = ?,publish_date = ?,last_updated_time = ?,periods = ?,admin_id =? ,admin_name =?,have_publish = ? WHERE article_id=?`
	_, err = to.Raw(sql, item.Title, item.Department, item.Abstract, item.PublishStatus, item.PublishDate, item.LastUpdatedTime, item.Periods, item.AdminId, item.AdminName, item.HavePublish, articleId).Exec()
	if err != nil {
		return
	}
	sql = ` DELETE FROM cygx_research_summary_log WHERE article_id = ?`
	_, err = to.Raw(sql, articleId).Exec()
	if err != nil {
		return
	}
	for _, v := range items {
		v.ArticleId = articleId
		newId, err = to.Insert(v)
		if err != nil {
			return
		}
	}
	return
}

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

// 通过纪要ID获取活动详情
func GetCygxResearchSummaryInfoById(articleId int) (item *CygxResearchSummaryRep, err error) {
	o := orm.NewOrm()
	sql := `SELECT * FROM cygx_research_summary  WHERE article_id=?`
	err = o.Raw(sql, articleId).QueryRow(&item)
	return
}

// 删除数据
func DeleteCygxResearchSummary(articleId int) (err error) {
	o := orm.NewOrm()
	to, err := o.Begin()
	if err != nil {
		return
	}
	defer func() {
		if err != nil {
			fmt.Println(err)
			_ = to.Rollback()
		} else {
			_ = to.Commit()
		}
	}()
	sql := ` DELETE FROM cygx_research_summary  WHERE article_id=? `
	_, err = to.Raw(sql, articleId).Exec()
	if err != nil {
		return
	}
	sql = ` DELETE FROM cygx_research_summary_log WHERE article_id = ?`
	_, err = to.Raw(sql, articleId).Exec()
	return
}

// 列表
func GetResearchSummaryList(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxResearchSummaryRep, err error) {
	o := orm.NewOrm()
	sql := `SELECT *,
				(SELECT COUNT(1) FROM cygx_report_history_record AS h WHERE h.article_id=rs.article_id AND report_type = 'bzyjhz' AND  h.company_id != 16) AS pv,
        		(SELECT COUNT(DISTINCT user_id) FROM cygx_report_history_record AS h WHERE h.article_id=rs.article_id  AND report_type = 'bzyjhz' AND  h.company_id != 16 ) AS uv
				FROM cygx_research_summary as rs WHERE 1= 1 `
	if condition != "" {
		sql += condition
	}
	sql += ` ORDER BY  rs.publish_date  DESC  LIMIT ?,?`
	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
	return
}

// 修改发布状态
func ResearchSummaryPublishAndCancel(item *CygxResearchSummaryRep) (err error) {
	o := orm.NewOrm()
	sql := `UPDATE cygx_research_summary SET  publish_status=? , last_updated_time= ?, periods= ? ,admin_id =? ,admin_name =? ,have_publish = 1 WHERE article_id=? `
	_, err = o.Raw(sql, item.PublishStatus, time.Now(), item.Periods, item.AdminId, item.AdminName, item.ArticleId).Exec()
	return
}

// 修改可见范围
func ResearchSummaryVisibleRange(item *CygxResearchSummaryRep) (err error) {
	o := orm.NewOrm()
	sql := `UPDATE cygx_research_summary SET  is_send_wx_msg = 1,  visible_range=? , last_updated_time= ?,admin_id =? ,admin_name =?  WHERE article_id=? `
	_, err = o.Raw(sql, item.VisibleRange, time.Now(), item.AdminId, item.AdminName, item.ArticleId).Exec()
	return
}

type DetailCygxResearchSummaryTmpRepS struct {
	List []*CygxRSlChartPermissionIcoTmps `description:"类型——’SDBG:深度报告片篇’"`
}

type CygxRSlChartPermissionIcoTmps struct {
	ChartPermissionId   int    `description:"行业ID"`
	ChartPermissionName string `description:"行业名称"`
	List                []string
	//List                make([]string, 0)
}

// 列表
func GetResearchSummarylogListFirst(articleId int) (items []*ResearchSummaryChartPermission, err error) {
	o := orm.NewOrm()
	sql := `SELECT l.* 
			FROM cygx_research_summary_log AS l 
			WHERE l.article_id = ? 
			GROUP BY l.type 
			ORDER BY l.sort ASC`
	_, err = o.Raw(sql, articleId).QueryRows(&items)
	return
}

type ResearchSummaryChartPermission struct {
	ListName string `description:"列表名称"`
	IcoLink  string `orm:"column(image_url)"description:"图标链接"`
	Type     string `description:"类型'SDBG深度报告片篇,’CYDYJY:产业调研纪要’,’SJDP事件点评,’BZCHJH:本周晨会精华’"`
	List     []*CygxResearchSummaryLogSecond
}
type CygxResearchSummaryLogSecond struct {
	PermissionName    string `description:"行业名称"`
	ChartPermissionId int    `description:"行业ID"`
	IcoLink           string `orm:"column(image_url)"description:"图标链接"`
	List              []*CygxResearchSummaryLogThird
}

type CygxResearchSummaryLogThird struct {
	Body string `description:"内容"`
}

// 列表
func GetResearchSummarylogSonListSecond(articleId int, artType string) (items []*CygxResearchSummaryLogSecond, err error) {
	o := orm.NewOrm()
	sql := `SELECT c.permission_name ,c.chart_permission_id ,c.image_url, l.* 
			FROM
			cygx_research_summary_log AS l
			LEFT JOIN chart_permission AS c ON c.chart_permission_id = l.chart_permission_id 
			WHERE l.article_id = ? AND l.type =?
			GROUP BY l.chart_permission_id
			ORDER  BY l.chart_permission_sort ASC`
	_, err = o.Raw(sql, articleId, artType).QueryRows(&items)
	return
}

// 列表
func GetResearchSummarylogSonListThird(articleId, chartPermissionId int, artType string) (items []*CygxResearchSummaryLogThird, err error) {
	o := orm.NewOrm()
	sql := `SELECT  l.link_article_id,l.body ,a.video_url
			FROM cygx_research_summary_log AS l
			LEFT JOIN cygx_article as a ON a.article_id = l.link_article_id
			WHERE l.article_id = ? AND l.type =? AND  l.chart_permission_id = ? 
			ORDER  BY l.chart_permission_sort ASC `
	_, err = o.Raw(sql, articleId, artType, chartPermissionId).QueryRows(&items)
	return
}