package ai_summary

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

type AiPrompt struct {
	AiPromptId    int       `orm:"column(ai_prompt_id);pk"` // ai纪要提示词id
	PromptContent string    // 原始内容
	SysAdminId    int       // 创建人ID
	SysAdminName  string    // 创建人姓名
	Title         string    // 文档标题
	CreateTime    time.Time // 创建时间
	ModifyTime    time.Time // 更新时间
	IsShare       int       // 是否分享,0:不分享,1:分享
	Sort          int       // 排序
}

type AiPromptItem struct {
	AiPromptId    int    `orm:"column(ai_prompt_id);pk"` // ai纪要提示词id
	PromptContent string // 原始内容
	SysAdminId    int    // 创建人ID
	SysAdminName  string // 创建人姓名
	Title         string // 文档标题
	CreateTime    string // 创建时间
	ModifyTime    string // 更新时间
	IsShare       int    // 是否分享,0:不分享,1:分享
	Sort          int    // 排序
}

func GetAiPromptList(sysUserId, isShare int) (items []*AiPromptItem, err error) {
	sql := ``
	if isShare == 1 {
		sql = ` SELECT * FROM ai_prompt WHERE sys_admin_id=? and is_share=1 ORDER BY sort  `
	} else {
		sql = ` SELECT * FROM ai_prompt WHERE sys_admin_id=? ORDER BY sort  `
	}
	o := orm.NewOrm()
	_, err = o.Raw(sql, sysUserId).QueryRows(&items)
	return
}

func GetAiPromptShareList() (items []*AiPromptItem, err error) {
	sql := ``
	sql = ` SELECT * FROM ai_prompt WHERE is_share=1 ORDER BY create_time DESC `

	o := orm.NewOrm()
	_, err = o.Raw(sql).QueryRows(&items)
	return
}

type RespGroupListItem struct {
	GroupId    int64  `description:"目录id"`
	GroupName  string `description:"目录名称"`
	AdminId    int    `description:"目录创建者账号ID"`
	IsShare    int8   `description:"是否共享,0私有,1共享"`
	PromptList []*AiPromptItem
}

type AiPromptAddReq struct {
	PromptContent string // 原始内容
	Title         string // 文档标题
}

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

type AiPromptEditReq struct {
	PromptContent string // 原始内容
	Title         string // 文档标题
	AiPromptId    int    // ai纪要提示词id
}

// Update
func (aiPrompt *AiPrompt) Update(cols []string) (err error) {
	o := orm.NewOrm()
	_, err = o.Update(aiPrompt, cols...)
	return
}

// DelAiSummaryById 根据纪要id删除纪要
func DelAiPromptyId(aiPromptId int) (err error) {
	o := orm.NewOrm()
	sql := `delete from ai_prompt where ai_prompt_id = ? `
	_, err = o.Raw(sql, aiPromptId).Exec()
	return
}

func GetAiPromptById(promptId int) (item *AiPrompt, err error) {
	o := orm.NewOrm()
	sql := `SELECT * FROM ai_prompt WHERE 1=1 AND ai_prompt_id=? `
	err = o.Raw(sql, promptId).QueryRow(&item)
	return
}

type DeleteAipromptReq struct {
	AiPromptId int // ai纪要提示词id
}

type ReqMovePrompt struct {
	AiPromptId     int `description:"当前被移动的目录里的ppt绑定序号"`
	PrevAiPromptId int `description:"上一个目录里的ppt绑定序号,ppt最终在目录中置顶,则传0值"`
	NextAiPromptId int `description:"下一个目录里的ppt绑定序号,ppt最终在目录末尾,则传0值"`
}

// GetAiPromptMaxSort 获取ai提示词下最大的排序数
func GetAiPromptMaxSort(adminId int) (sort int, err error) {
	o := orm.NewOrm()
	sql := `SELECT Max(sort) AS sort FROM ai_prompt WHERE sys_admin_id=? `
	err = o.Raw(sql, adminId).QueryRow(&sort)
	return
}


// MoveDownPromptBySort 往下移动提示词
func MoveDownPromptBySort(sysAdminId, prevSort, currentSort int) (err error) {
	o := orm.NewOrm()
	sql := `update ai_prompt set sort = sort - 1 where sys_admin_id = ? and sort <= ? and sort> ? `
	_, err = o.Raw(sql, sysAdminId, prevSort, currentSort).Exec()
	return
}

// MoveUpPromptBySort 往上移动提示词
func MoveUpPromptBySort(sysAdminId, nextSort, currentSort int) (err error) {
	o := orm.NewOrm()
	sql := `update ai_prompt set sort = sort + 1 where sys_admin_id = ? and sort >= ? and sort< ?`
	_, err = o.Raw(sql, sysAdminId, nextSort, currentSort).Exec()
	return
}