package models

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

// ChartPermission 报告权限表
type ChartPermission struct {
	ChartPermissionId   int       `orm:"column(chart_permission_id);pk" description:"问题ID"`
	ChartPermissionName string    `description:"名称"`
	PermissionName      string    `description:"权限名"`
	Sort                int       `description:"排序"`
	Enabled             int       `description:"是否可用"`
	CreatedTime         time.Time `description:"创建时间"`
	LastUpdatedTime     time.Time `description:"更新时间"`
	TeleconferenceSort  int       `description:"电话会类型排序"`
	Remark              string    `description:"备注"`
	ClassifyName        string    `description:"分类名称"`
	ProductName         string    `description:"产品名称"`
	ProductId           int       `description:"产品ID"`
	ImageURL            string    `description:"图片地址"`
	ShowType            int       `description:"1:查研观向小程序展示"`
	IsOther             int       `description:"是否是其他,用于查研观向小程序后台展示"`
	IsReport            int       `description:"是否是报告,用于查研观向小程序前台报告展示"`
	CygxAuth            int       `description:"是否是权限,用于查研观向小程序前台权限校验"`
	YbImgUrl            string    `description:"研报小程序报告列表icon"`
	PriceDrivenState    int       `description:"品种价格驱动开启状态 0-关闭 1-开启"`
}

// GetChartPermissionById 主键获取权限
func GetChartPermissionById(permissionId int) (item *ChartPermission, err error) {
	o := orm.NewOrm()
	sql := `SELECT * FROM chart_permission WHERE chart_permission_id = ? LIMIT 1`
	err = o.Raw(sql, permissionId).QueryRow(&item)
	return
}

// Update 更新
func (chartPermissionInfo *ChartPermission) Update(cols []string) (err error) {
	o := orm.NewOrm()
	_, err = o.Update(chartPermissionInfo, cols...)
	return
}

// YbChartPermissionFirst 研报一级品种分类
type YbChartPermissionFirst struct {
	Id           int
	ClassifyName string `description:"权限一级分类名称,与chart_permission的classify_name一致"`
	YbIndexShow  int    `description:"是否展示在研报小程序首页页面  1-展示;0-不展示"`
	YbIndexName  string `description:"研报小程序首页简称"`
	YbIndexSort  string `description:"研报小程序首页排序"`
	YbIndexIcon  string `description:"研报小程序首页图标地址"`
}

// GetPermissionByProductIdAndClassifyName 获取子分类
func GetPermissionByProductIdAndClassifyName(productId int, classifyName string) (items []*ChartPermission, err error) {
	o := orm.NewOrm()
	sql := `SELECT * FROM chart_permission WHERE enabled = 1 AND product_id = ? AND classify_name = ? AND permission_type = 0 ORDER BY sort ASC`
	_, err = o.Raw(sql, productId, classifyName).QueryRows(&items)
	return
}

// GetChartPermissionById 主键获取权限
func GetChartPermissionByRemark(remark string) (item *ChartPermission, err error) {
	o := orm.NewOrm()
	sql := `SELECT * FROM chart_permission WHERE remark = ? LIMIT 1`
	err = o.Raw(sql, remark).QueryRow(&item)
	return
}

// GetChartPermissionByIds 主键获取权限
func GetChartPermissionByIds(permissionIds []string) (list []*ChartPermission, err error) {
	qb, _ := orm.NewQueryBuilder("mysql")
	// 构建查询对象
	qb.Select("*").From("chart_permission").
		Where("chart_permission_id").In(permissionIds...)
	// 导出 SQL 语句
	sql := qb.String()

	// 执行 SQL 语句
	o := orm.NewOrm()
	_, err = o.Raw(sql).QueryRows(&list)
	return
}

// GetChartPermissionByIds 主键获取权限
func GetChartPermissionByNames(permissionNames []string) (list []*ChartPermission, err error) {
	qb, _ := orm.NewQueryBuilder("mysql")
	// 构建查询对象
	qb.Select("*").From("chart_permission").
		Where("chart_permission_name").In(permissionNames...)
	// 导出 SQL 语句
	sql := qb.String()

	// 执行 SQL 语句
	o := orm.NewOrm()
	_, err = o.Raw(sql).QueryRows(&list)
	return
}

// GetChartPermissionList 获取品种权限列表
func GetChartPermissionList() (list []*ChartPermission, err error) {
	o := orm.NewOrm()
	sql := `SELECT * FROM chart_permission ORDER BY product_id ASC, sort ASC`
	_, err = o.Raw(sql).QueryRows(&list)
	return
}