package models

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

// ClassifyMenuRelation 报告分类-子目录关联表
type ClassifyMenuRelation struct {
	Id         int       `orm:"column(id);pk"`
	MenuId     int       `description:"子目录ID"`
	ClassifyId int       `description:"二级分类ID"`
	CreateTime time.Time `description:"创建时间"`
}

func (item *ClassifyMenuRelation) TableName() string {
	return "classify_menu_relation"
}

func (item *ClassifyMenuRelation) Create() (err error) {
	o := orm.NewOrmUsingDB("rddp")
	id, err := o.Insert(item)
	if err != nil {
		return
	}
	item.Id = int(id)
	return
}

func (item *ClassifyMenuRelation) Update(cols []string) (err error) {
	o := orm.NewOrmUsingDB("rddp")
	_, err = o.Update(item, cols...)
	return
}

func (item *ClassifyMenuRelation) InsertMulti(items []*ClassifyMenuRelation) (err error) {
	o := orm.NewOrmUsingDB("rddp")
	_, err = o.InsertMulti(len(items), items)
	return
}

// GetClassifyMenuRelationList 获取子目录关联列表
func GetClassifyMenuRelationList(condition string, pars []interface{}) (list []*ClassifyMenuRelation, err error) {
	o := orm.NewOrmUsingDB("rddp")
	sql := `SELECT * FROM classify_menu_relation WHERE 1 = 1 `
	sql += condition
	sql += ` ORDER BY create_time DESC`
	_, err = o.Raw(sql, pars).QueryRows(&list)
	return
}

// DeleteAndInsertClassifyMenuRelation 新增子目录关联
func DeleteAndInsertClassifyMenuRelation(classifyId, menuId int) (err error) {
	o := orm.NewOrmUsingDB("rddp")
	tx, err := o.Begin()
	if err != nil {
		return
	}
	defer func() {
		if err != nil {
			_ = tx.Rollback()
		} else {
			_ = tx.Commit()
		}
	}()

	// 删除
	sql := `DELETE FROM classify_menu_relation WHERE classify_id = ?`
	if _, e := tx.Raw(sql, classifyId).Exec(); e != nil {
		err = e
		return
	}

	// 新增
	if menuId > 0 {
		relate := &ClassifyMenuRelation{
			ClassifyId: classifyId,
			MenuId:     menuId,
			CreateTime: time.Now().Local(),
		}
		_, e := tx.Insert(relate)
		if e != nil {
			err = e
		}
	}
	return
}