package models

import (
	"time"

	"gorm.io/gorm"
)

// 角色预设权限关联表
type MgtLinkRolePmn struct {
	RoleId    uint      `gorm:"column:role_id;primaryKey" json:"role_id"`                     // 角色ID
	AppId     uint      `gorm:"column:app_id;primaryKey" json:"app_id"`                       // 应用ID
	PmnId     uint      `gorm:"column:pmn_id;primaryKey" json:"pmn_id"`                       // 权限ID
	CreatedAt time.Time `gorm:"column:created_at;autoCreateTime" json:"created_at,omitempty"` // 创建时间
}

func (MgtLinkRolePmn) TableName() string {
	return "mgt_link_role_pmn"
}

// func init() {
// 	database.AppendMigrate(&MgtLinkRolePmn{})
// }

// AfterDelete钩子：仅当该角色在该应用下不再拥有任何权限时，移除角色-应用关联
func (l *MgtLinkRolePmn) AfterDelete(tx *gorm.DB) error {
	var count int64
	if err := tx.Model(&MgtLinkRolePmn{}).
		Where("app_id = ? AND role_id = ?", l.AppId, l.RoleId).
		Count(&count).Error; err != nil {
		return err
	}
	if count == 0 {
		if err := tx.Where("app_id = ? AND role_id = ?", l.AppId, l.RoleId).
			Delete(&MgtLinkRoleApp{}).Error; err != nil {
			return err
		}
	}
	return nil
}
