package cygx

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

type CygxMinutesSummary 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 CygxMinutesSummaryRep 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 CygxMinutesSummaryListRep struct {
	Paging *paging.PagingItem `description:"分页数据"`
	List   []*CygxMinutesSummaryRep
}

type AddCygxMinutesSummary 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     *CygxMinutesList          `description:"内容"`
	List        []*CygxMSlChartPermission `description:"内容"`
}

type DetailCygxMinutesSummaryRep struct {
	ArticleId     int    `description:"报告Id ,传0时新增,大于0时修改"`
	Title         string `description:"标题"`
	Department    string `description:"作者"`
	Abstract      string `description:"摘要"`
	PublishDate   string `description:"发布时间"`
	PublishStatus int    `description:"发布状态,1已发布,0未发布"`
	//List          []*CygxRSlChartPermissionIco `description:"内容列表"`

	SortCydyjy string                       `description:"产业调研纪要排序"`
	ListCydyjy []*CygxRSlChartPermissionIco `description:"类型——’CYDYJY:产业调研纪要’"`
	ListSsgs   []*CygxRSlChartPermissionIco `description:"类型——’SSGS:上市公司调研纪要篇’"`
	SortSsgs   string                       `description:"上市公司调研纪要篇排序"`
	SortYanx   string                       `description:"研选排序"`
	ListYanx   []*AddCygxMinutesSummaryLog  `description:"类型——’YANX:研选’"`
}

type CygxMinutesList struct {
	ListCydyjy []*CygxRSlChartPermission   `description:"类型——’CYDYJY:产业调研纪要’"`
	SortCydyjy string                      `description:"产业调研纪要排序"`
	ListSsgs   []*CygxRSlChartPermission   `description:"类型——’SSGS:上市公司调研纪要篇’"`
	SortSsgs   string                      `description:"上市公司调研纪要篇排序"`
	ListYanx   []*AddCygxMinutesSummaryLog `description:"类型——’YANX:研选’"`
	SortYanx   string                      `description:"研选排序"`
}

type DetailCygxMinutesSummaryTmpRep 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    []*AddCygxMinutesSummaryLog     `description:"类型——’SJDP:事件点评"`
	SortBzchjh  string                          `description:"本周晨会精华排序"`
	ListBzchjh  []*CygxRSlChartPermissionIcoTmp `description:"类型——’BZCHJH:本周晨会精华’"`
}

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

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

// 编辑
func UpdateCygxMinutesSummaryOrm(item *CygxMinutesSummary, items []*CygxMinutesSummaryLog) (newId int64, err error) {
	o := orm.NewOrmUsingDB("hz_cygx")
	to, err := o.Begin()
	if err != nil {
		return
	}
	defer func() {
		if err != nil {
			fmt.Println(err)
			_ = to.Rollback()
		} else {
			_ = to.Commit()
		}
	}()
	articleId := item.ArticleId
	fmt.Println("m文章ID", articleId)
	sql := `UPDATE cygx_minutes_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_minutes_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 GetCygxMinutesSummary(condition string, pars []interface{}) (count int, err error) {
	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_minutes_summary as rs WHERE 1= 1  `
	if condition != "" {
		sqlCount += condition
	}
	o := orm.NewOrmUsingDB("hz_cygx")
	err = o.Raw(sqlCount, pars).QueryRow(&count)
	return
}

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

// 删除数据
func DeleteCygxMinutesSummary(articleId int) (err error) {
	o := orm.NewOrmUsingDB("hz_cygx")
	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_minutes_summary  WHERE article_id=? `
	_, err = to.Raw(sql, articleId).Exec()
	if err != nil {
		return
	}
	sql = ` DELETE FROM cygx_minutes_summary_log WHERE article_id = ?`
	_, err = to.Raw(sql, articleId).Exec()
	return
}

// 列表
func GetMinutesSummaryList(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxMinutesSummaryRep, err error) {
	o := orm.NewOrmUsingDB("hz_cygx")
	sql := `SELECT *,
				(SELECT COUNT(1) FROM cygx_report_history_record AS h WHERE h.article_id=rs.article_id AND report_type = 'szjyhz'  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 = 'szjyhz' AND  h.company_id != 16 ) AS uv
				FROM cygx_minutes_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 MinutesSummaryPublishAndCancel(item *CygxMinutesSummaryRep) (err error) {
	o := orm.NewOrmUsingDB("hz_cygx")
	sql := `UPDATE cygx_minutes_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 MinutesSummaryVisibleRange(item *CygxMinutesSummaryRep) (err error) {
	o := orm.NewOrmUsingDB("hz_cygx")
	sql := `UPDATE cygx_minutes_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
}

// 列表
func GetMinutesSummarylogListAll(articleId int) (items []*ResearchSummaryChartPermission, err error) {
	o := orm.NewOrmUsingDB("hz_cygx")
	//sql := `SELECT c.permission_name ,c.image_url,l.*
	//		FROM
	//		cygx_minutes_summary_log AS l
	//		INNER JOIN chart_permission AS c ON c.chart_permission_id = l.chart_permission_id
	//		WHERE l.article_id = ?
	//		GROUP BY l.chart_permission_id
	//		ORDER BY l.chart_permission_sort ASC   `

	sql := `SELECT l.* 
			FROM cygx_minutes_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
}

// 列表
func GetMinutesSummarylogSonListSecond(articleId int, artType string) (items []*CygxResearchSummaryLogSecond, err error) {
	o := orm.NewOrmUsingDB("hz_cygx")
	sql := `SELECT  l.* 
			FROM
			cygx_minutes_summary_log AS l
			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 GetMinutesSummarylogListThird(articleId, chartPermissionId int, artType string) (items []*CygxResearchSummaryLogThird, err error) {
	o := orm.NewOrmUsingDB("hz_cygx")
	sql := `SELECT  l.link_article_id,l.body ,a.video_url
			FROM cygx_minutes_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
}

type MinutesSummaryChartPermission struct {
	PermissionName    string `description:"行业名称"`
	ChartPermissionId int    `description:"行业ID"`
	MinutesSummary    string `orm:"column(image_url)"description:"图标链接"`
	List              []*CygxMinutesSummaryLogDetail
}

type CygxMinutesSummaryLogDetail struct {
	Body        string `description:"内容"`
	ReportLink  string `orm:"column(link_article_id)"description:"报告链接"`
	VideoUrl    string `description:"链接"`
	IsHaveVideo bool   `description:"是否含有音频文件"`
}

// 列表
func GetMinutesSummarylogSonListAll(articleId, chartPermissionId int) (items []*CygxMinutesSummaryLogDetail, err error) {
	o := orm.NewOrmUsingDB("hz_cygx")
	sql := `SELECT   l.link_article_id,l.body ,a.video_url 
			FROM
			cygx_minutes_summary_log AS l
			LEFT JOIN cygx_article as a ON a.article_id = l.link_article_id
			WHERE l.article_id = ? AND l.chart_permission_id =?`
	_, err = o.Raw(sql, articleId, chartPermissionId).QueryRows(&items)
	return
}