package cygx

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

type CygxMicroRoadshowVideo struct {
	VideoId             int       `orm:"column(video_id);pk"description:"微路演视频id"`
	VideoName           string    `description:"视频名称"`
	ChartPermissionId   int       `description:"行业Id"`
	ChartPermissionName string    `description:"行业名称"`
	IndustryId          int       `description:"产业id"`
	IndustryName        string    `description:"产业名称"`
	PublishStatus       int       `description:"发布状态 1发布 0没有"`
	ModifyDate          string    `description:"更新时间"`
	PublishDate         time.Time `description:"发布时间"`
	VideoDuration       string    `description:"视频时长"`
	VideoCounts         int       `description:"播放量"`
	VideoUrl            string    `description:"视频地址"`
	CreateTime          string    `description:"创建时间"`
	ImgUrl              string    `description:"视频封面图"`
	ShareImgUrl         string    `description:"视频分享图"`
	DetailImgUrl        string    `description:"产业详情页背景图"`
	CommentNum          int       `description:"留言总数"`
	IsSendWxMsg         int       `description:"是否推送过微信模板消息,1是,0:否"`
}

type CygxMicroRoadshowVideoResp struct {
	VideoId             int    `orm:"column(video_id);pk"description:"微路演视频id"`
	VideoName           string `description:"视频名称"`
	ChartPermissionId   int    `description:"行业Id"`
	ChartPermissionName string `description:"行业名称"`
	IndustryId          int    `description:"产业id"`
	IndustryName        string `description:"产业名称"`
	PublishStatus       int    `description:"发布状态 1发布 0没有"`
	ModifyDate          string `description:"更新时间"`
	PublishDate         string `description:"发布时间"`
	VideoDuration       string `description:"视频时长"`
	VideoCounts         int    `description:"播放量"`
	VideoUrl            string `description:"视频地址"`
	CreateTime          string `description:"创建时间"`
	ImgUrl              string `description:"视频封面图"`
	ShareImgUrl         string `description:"视频分享图"`
	DetailImgUrl        string `description:"产业详情页背景图"`
	CommentNum          int    `description:"留言总数"`
}

type MicroRoadshowVideoListResp struct {
	Paging *paging.PagingItem
	List   []*CygxMicroRoadshowVideoResp
}

func GetMicroRoadshowVideoList(condition, sortStr string, pars []interface{}, startSize, pageSize int) (items []*CygxMicroRoadshowVideo, err error) {
	o := orm.NewOrmUsingDB("hz_cygx")
	sql := ` SELECT *,(SELECT COUNT(1) FROM cygx_article_comment AS h    WHERE h.industry_id=v.industry_id AND  h.activity_id = 0 ) AS comment_num FROM cygx_micro_roadshow_video as v  WHERE 1=1 `
	if condition != "" {
		sql += condition
	}

	if sortStr == "" {
		sortStr = "ORDER BY publish_date DESC "
	}

	sql += sortStr + ` LIMIT ?,? `
	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
	return
}

func GetCygxMicroRoadshowVideoList(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxMicroRoadshowVideo, err error) {
	o := orm.NewOrmUsingDB("hz_cygx")
	sql := ` SELECT * FROM cygx_micro_roadshow_video as v  WHERE 1=1 `
	if condition != "" {
		sql += condition
	}
	sql += ` LIMIT ?,? `
	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
	return
}

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

// 视频保存请求参数
type VideoAddReq struct {
	VideoId           int    `description:"视频Id"`
	VideoName         string `description:"视频标题"`
	VideoUrl          string `description:"视频地址"`
	VideoDuration     string `description:"视频时长"`
	ChartPermissionId int    `description:"行业id"`
	IndustryId        int    `description:"产业id"`
	ImgUrl            string `description:"视频封面图"`
	ShareImgUrl       string `description:"视频分享图"`
	DetailImgUrl      string `description:"产业详情页背景图"`
	PublishDate       string `description:"发布时间"`
	PublishOrSave     int    `description:"保存或发布 1发布 0保存"`
}

func GetMicroRoadshowVideoByTitle(title string) (count int, err error) {
	o := orm.NewOrmUsingDB("hz_cygx")
	sql := ` SELECT COUNT(1) AS count FROM cygx_micro_roadshow_video WHERE video_name =? `
	err = o.Raw(sql, title).QueryRow(&count)
	return
}

// 新增视频
func AddMicroRoadshowVideo(item *CygxMicroRoadshowVideo) (newId int64, err error) {
	o := orm.NewOrmUsingDB("hz_cygx")
	newId, err = o.Insert(item)
	return
}

// 视频编辑请求参数
type VideoEditReq struct {
	VideoId             int    `description:"视频id"`
	VideoName           string `description:"视频标题"`
	VideoUrl            string `description:"视频地址"`
	VideoDuration       string `description:"视频时长"`
	ChartPermissionId   int    `description:"行业Id"`
	ChartPermissionName string `description:"行业名称"`
	IndustryId          int    `description:"产业id"`
	IndustryName        string `description:"产业名称"`
	PublishDate         string `description:"发布时间"`
}

// 新增视频
func EditVideo(item *CygxMicroRoadshowVideo) (err error) {
	o := orm.NewOrmUsingDB("hz_cygx")
	sql := " UPDATE cygx_micro_roadshow_video SET " +
		" video_url = ?, video_name = ?,chart_permission_id=?, chart_permission_name=?, industry_id =?, industry_name =?, " +
		" modify_date=?, publish_date=?, video_duration=?, img_url=?, share_img_url=?, detail_img_url=?, publish_status=? WHERE video_id = ? "
	_, err = o.Raw(sql, item.VideoUrl, item.VideoName, item.ChartPermissionId, item.ChartPermissionName,
		item.IndustryId, item.IndustryName, item.ModifyDate, item.PublishDate, item.VideoDuration, item.ImgUrl, item.ShareImgUrl, item.DetailImgUrl, item.PublishStatus, item.VideoId).Exec()
	return
}

// 修改
func UpdateCygxMicroRoadshowVideo(item *CygxMicroRoadshowVideo) (err error) {
	to := orm.NewOrmUsingDB("hz_cygx")
	updateParams := make(map[string]interface{})
	updateParams["ShareImgUrl"] = item.ShareImgUrl
	ptrStructOrTableName := "cygx_micro_roadshow_video"
	whereParam := map[string]interface{}{"video_id": item.VideoId}
	qs := to.QueryTable(ptrStructOrTableName)
	for expr, exprV := range whereParam {
		qs = qs.Filter(expr, exprV)
	}
	_, err = qs.Update(updateParams)
	return
}

func PublishVideoCancel(videoId, publishOrCancle int) (err error) {

	if publishOrCancle == 0 {
		publishOrCancle = 3 // 取消发布状态
	}
	o := orm.NewOrmUsingDB("hz_cygx")
	sql := `UPDATE cygx_micro_roadshow_video SET publish_status=?,modify_date=NOW() WHERE video_id =?`
	_, err = o.Raw(sql, publishOrCancle, videoId).Exec()
	return
}

type CygxMicroRoadshowVideoHistory struct {
	Id               int       `orm:"column(id);pk"description:"微路演视频浏览记录表id"`
	VideoId          int       `description:"微路演视频id"`
	UserId           int       `description:"用户id"`
	Mobile           string    `description:"手机号"`
	Email            string    `description:"邮箱"`
	CompanyId        int       `description:"公司Id"`
	CompanyName      string    `description:"公司名称"`
	RealName         string    `description:"用户实际名称"`
	SellerName       string    `description:"所属销售"`
	PlaySeconds      string    `description:"播放时间 单位s"`
	CreateTime       string    `description:"视频创建时间"`
	ModifyTime       time.Time `description:"视频修改时间"`
	RegisterPlatform string    `description:"来源 1小程序,2:网页"`
}

func GetMicroRoadshowVideoHistoryByIdPage(condition string, pars []interface{}, startSize, pageSize int) (item []*CygxMicroRoadshowVideoHistory, err error) {
	o := orm.NewOrmUsingDB("hz_cygx")
	sql := ` SELECT * FROM cygx_micro_roadshow_video_history WHERE 1=1 `
	if condition != "" {
		sql += condition
	}
	sql += ` ORDER BY  create_time DESC LIMIT ?,? `
	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&item)
	return
}

func GetMicroRoadshowVideoHistoryById(condition string, pars []interface{}) (item []*CygxMicroRoadshowVideoHistory, err error) {
	o := orm.NewOrmUsingDB("hz_cygx")
	sql := ` SELECT * FROM cygx_micro_roadshow_video_history WHERE 1=1 `
	if condition != "" {
		sql += condition
	}
	sql += ` ORDER BY  create_time DESC `
	_, err = o.Raw(sql, pars).QueryRows(&item)
	return
}

//type CygxMicroRoadshowVoice struct {
//	ActivityVoiceId     int    `orm:"column(activity_voice_id);pk"description:"微路演视频id"`
//	ActivityId          string `description:"活动Id"`
//	VoiceName           string `description:"音频名称"`
//	ChartPermissionId   int    `description:"行业Id"`
//	ChartPermissionName string `description:"行业名称"`
//	IndustryId          int    `description:"产业id"`
//	IndustryName        string `description:"产业名称"`
//	ModifyDate          string `description:"更新时间"`
//	PublishDate         string `description:"发布时间"`
//	VoicePlaySeconds    string `description:"音频时长"`
//	VoiceCounts         int    `description:"播放量"`
//	VoiceUrl            string `description:"音频地址"`
//	CreateTime          string `description:"创建时间"`
//}

type CygxMicroRoadshowVoice struct {
	ActivityVoiceId     int       `description:"微路演音频id"`
	ActivityId          string    `description:"活动Id"`
	VoiceName           string    `description:"音频名称"`
	ChartPermissionId   int       `description:"行业Id"`
	ChartPermissionName string    `description:"行业名称"`
	IndustryId          int       `description:"产业id"`
	IndustryName        string    `description:"产业名称"`
	ModifyTime          string    `description:"更新时间"`
	PublishDate         string    `description:"发布时间"`
	VoicePlaySeconds    string    `description:"音频时长"`
	VoiceCounts         int       `description:"播放量"`
	VoiceUrl            string    `description:"音频地址"`
	CreateTime          string    `description:"创建时间"`
	Label               string    `description:"活动标签"`
	ActivityTypeId      string    `description:"活动类型Id"`
	ActivityTypeName    string    `description:"活动类型名称"`
	ActivityTime        time.Time `description:"活动类型时间"`
	ActivityTimeText    string    `description:"活动类型时间文字"`
	CommentNum          int       `description:"留言总数"`
}

type CygxMicroRoadshowVoiceRsep struct {
	ActivityVoiceId     int    `description:"微路演音频id"`
	ActivityId          string `description:"活动Id"`
	VoiceName           string `description:"音频名称"`
	ChartPermissionId   int    `description:"行业Id"`
	ChartPermissionName string `description:"行业名称"`
	IndustryId          int    `description:"产业id"`
	IndustryName        string `description:"产业名称"`
	ModifyTime          string `description:"更新时间"`
	PublishDate         string `description:"发布时间"`
	VoicePlaySeconds    string `description:"音频时长"`
	VoiceCounts         int    `description:"播放量"`
	VoiceUrl            string `description:"音频地址"`
	CreateTime          string `description:"创建时间"`
	Label               string `description:"活动标签"`
	ActivityTypeId      string `description:"活动类型Id"`
	ActivityTypeName    string `description:"活动类型名称"`
	ActivityTime        string `description:"活动类型时间"`
	ActivityTimeText    string `description:"活动类型时间文字"`
	CommentNum          int    `description:"留言总数"`
}

type MicroRoadshowVoiceListResp struct {
	Paging *paging.PagingItem
	List   []*CygxMicroRoadshowVoiceRsep
}

func GetMicroRoadshowVoiceList(condition, sortStr string, pars []interface{}, startSize, pageSize int) (items []*CygxMicroRoadshowVoice, err error) {
	o := orm.NewOrmUsingDB("hz_cygx")
	sql := ` SELECT
	v.*,
	a.label,
	a.activity_type_id,
	a.activity_type_name,
	a.activity_time,
	a.activity_time_text,
	(SELECT COUNT(1) FROM cygx_article_comment AS h    WHERE h.activity_id=a.activity_id AND  h.industry_id = 0 AND h.video_id = 0) AS comment_num,
	a.chart_permission_name 
FROM
	cygx_activity_voice AS v
	INNER JOIN cygx_activity AS a 
WHERE
	v.activity_id = a.activity_id `
	if condition != "" {
		sql += condition
	}

	if sortStr == "" {
		sortStr = "ORDER BY  a.activity_time DESC "
	}

	sql += sortStr + ` LIMIT ?,? `
	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
	return
}

func GetMicroRoadshowVoiceListCount(condition string, pars []interface{}) (count int, err error) {
	o := orm.NewOrmUsingDB("hz_cygx")
	sql := `SELECT
	COUNT(1) AS count
FROM
	cygx_activity_voice AS v
	INNER JOIN cygx_activity AS a 
WHERE
	v.activity_id = a.activity_id `
	if condition != "" {
		sql += condition
	}
	err = o.Raw(sql, pars).QueryRow(&count)
	return
}

type PermissionNameAndIndustryName struct {
	PermissionName string
	PermissionId   int
	IndustryName   string
}

func GetPermissionNameAndIndustryNameByIndustryId(industryId int) (item *PermissionNameAndIndustryName, err error) {
	o := orm.NewOrmUsingDB("hz_cygx")
	sql := `SELECT
			cm.industry_name as industry_name,
			cm.chart_permission_id AS permission_id
		FROM
			 cygx_industrial_management AS cm 
		WHERE
		1=1 
			AND cm.industrial_management_id = ? `

	err = o.Raw(sql, industryId).QueryRow(&item)
	return
}

type MicroRoadshowVideoHistoryListResp struct {
	Paging *paging.PagingItem
	List   []*CygxMicroRoadshowVideoHistory
}

type CygxMicroRoadshowVoiceHistory struct {
	Id               int       `orm:"column(id);pk"description:"音频id"`
	VideoId          int       `description:"微路演音频id"`
	ActivityId       int       `description:"活动id"`
	UserId           int       `description:"用户id"`
	Mobile           string    `description:"手机号"`
	Email            string    `description:"邮箱"`
	CompanyId        int       `description:"公司Id"`
	CompanyName      string    `description:"公司名称"`
	RealName         string    `description:"用户实际名称"`
	SellerName       string    `description:"所属销售"`
	PlaySeconds      string    `description:"播放时间 单位s"`
	CreateTime       string    `description:"视频创建时间"`
	ModifyTime       time.Time `description:"视频修改时间"`
	RegisterPlatform string    `description:"来源 1小程序,2:网页"`
}

func GetMicroRoadshowVoiceHistoryById(condition string, pars []interface{}) (item []*CygxMicroRoadshowVoiceHistory, err error) {
	o := orm.NewOrmUsingDB("hz_cygx")
	sql := ` SELECT
	h.* 
FROM
	cygx_activity_voice_history AS h
	INNER JOIN cygx_activity_voice AS v 
WHERE
	1 = 1 
	AND v.activity_id = h.activity_id 
	 `
	if condition != "" {
		sql += condition
	}
	sql += ` ORDER BY  create_time DESC `
	_, err = o.Raw(sql, pars).QueryRows(&item)
	return
}

func GetPermissionNameAndIndustryNameByChartPermissionId(ChartPermissionId int) (item *PermissionNameAndIndustryName, err error) {
	o := orm.NewOrm()
	sql := `SELECT
	chart_permission_id AS permission_id, 
	chart_permission_name AS permission_name
FROM
	chart_permission 
WHERE
	chart_permission_id = ? `

	err = o.Raw(sql, ChartPermissionId).QueryRow(&item)
	return
}

func GetMicroRoadshowVideoByIndustryId(industryId int) (item *CygxMicroRoadshowVideo, err error) {
	o := orm.NewOrmUsingDB("hz_cygx")
	sql := `SELECT * from cygx_micro_roadshow_video where industry_id = ? `
	err = o.Raw(sql, industryId).QueryRow(&item)
	return
}

func GetMicroRoadshowVideoByVideoId(videoId int) (item *CygxMicroRoadshowVideo, err error) {
	o := orm.NewOrmUsingDB("hz_cygx")
	sql := `SELECT * from cygx_micro_roadshow_video where video_id = ? `
	err = o.Raw(sql, videoId).QueryRow(&item)
	return
}

// 修改是否推送过模板消息的状态
func UpdateIsSendWxMsg(videoId, isSendWxMsg int) (err error) {
	o := orm.NewOrmUsingDB("hz_cygx")
	sql := `UPDATE cygx_micro_roadshow_video SET is_send_wx_msg=?  WHERE video_id =?`
	_, err = o.Raw(sql, isSendWxMsg, videoId).Exec()
	return
}

func GetMicroRoadshowVoiceById(activityId int) (item *CygxMicroRoadshowVoice, err error) {
	o := orm.NewOrmUsingDB("hz_cygx")
	sql := `SELECT
	v.*,
	a.label,
	a.activity_type_id,
	a.activity_type_name,
	a.activity_time,
	a.activity_time_text,
	a.chart_permission_name 
FROM
	cygx_activity_voice AS v
	INNER JOIN cygx_activity AS a 
WHERE
	v.activity_id = a.activity_id AND v.activity_id = ?`
	err = o.Raw(sql, activityId).QueryRow(&item)
	return
}