package report

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

// ReportChapterGrant
// @Description: 报告章节授权用户表
type ReportChapterGrant struct {
	GrantId         int       `orm:"column(grant_id)"` // 授权id
	ReportChapterId int       `description:"报告章节id"`
	AdminId         int       `description:"授权的用户id"`
	CreateTime      time.Time `description:"授权时间"`
}

// MultiAddReportChapterGrantGrant
// @Description: 批量添加报告授权用户
// @author: Roc
// @receiver m
// @datetime 2024-06-04 15:36:02
// @param reportChapterId int
// @param list []*ReportChapterGrant
// @return err error
func (m ReportChapterGrant) MultiAddReportChapterGrantGrant(reportChapterId int, list []*ReportChapterGrant) (err error) {
	o := orm.NewOrmUsingDB("rddp")
	to, err := o.Begin()
	if err != nil {
		return
	}
	defer func() {
		if err != nil {
			_ = to.Rollback()
		} else {
			_ = to.Commit()
		}
	}()

	sql := "DELETE from report_chapter_grant where report_chapter_id=?"
	_, err = to.Raw(sql, reportChapterId).Exec()
	if err != nil {
		return
	}

	// 新增授权记录
	if len(list) > 0 {
		_, tmpErr := to.InsertMulti(500, list)
		if tmpErr != nil {
			err = tmpErr
			return
		}
	}

	return
}

// GetGrantListById
// @Description: 根据id获取授权列表
// @author: Roc
// @receiver m
// @datetime 2024-06-04 15:33:58
// @param reportChapterId int
// @return list []*ReportChapterGrant
// @return err error
func (m ReportChapterGrant) GetGrantListById(reportChapterId int) (list []*ReportChapterGrant, err error) {
	o := orm.NewOrmUsingDB("rddp")
	sql := `SELECT * FROM report_chapter_grant WHERE report_chapter_id=? `
	_, err = o.Raw(sql, reportChapterId).QueryRows(&list)

	return
}

// GetGrantListByIdList
// @Description: 根据id列表获取授权列表
// @author: Roc
// @receiver m
// @datetime 2024-06-04 15:33:58
// @param reportChapterIdList []int
// @return list []*ReportChapterGrant
// @return err error
func (m ReportChapterGrant) GetGrantListByIdList(reportChapterIdList []int) (list []*ReportChapterGrant, err error) {
	num := len(reportChapterIdList)
	if num <= 0 {
		return
	}

	o := orm.NewOrmUsingDB("rddp")
	sql := `SELECT * FROM report_chapter_grant WHERE report_chapter_id in (` + utils.GetOrmInReplace(num) + `) `
	_, err = o.Raw(sql, reportChapterIdList).QueryRows(&list)

	return
}

// GetGrantByIdAndAdmin
// @Description: 根据reportId和操作人获取报告章节权限配置
// @author: Roc
// @receiver m
// @datetime 2024-06-04 15:49:59
// @param reportChapterId int
// @param sysUserId int
// @return item *ReportGrant
// @return err error
func (m ReportChapterGrant) GetGrantByIdAndAdmin(reportChapterId, sysUserId int) (item *ReportGrant, err error) {
	o := orm.NewOrmUsingDB("rddp")
	sql := `SELECT * FROM report_chapter_grant WHERE report_chapter_id = ? AND admin_id = ? `
	err = o.Raw(sql, reportChapterId, sysUserId).QueryRow(&item)

	return
}
