package forms

import (
	"errors"
	"time"
)

type AdminRoleListReq struct {
	ListReq
	Sn        string  `json:"sn" form:"sn"`
	Cdk       string  `json:"cdk" form:"cdk"`
	CreatedAt []int64 `json:"created_at" form:"created_at[]"`
	Time      []time.Time
}

func (req *AdminRoleListReq) Check() error {
	if req.CreatedAt != nil && len(req.CreatedAt) != 2 {
		return errors.New("生成时间必须选择一个区间或者留空")
	}

	if len(req.CreatedAt) == 2 {
		if req.CreatedAt[0] > req.CreatedAt[1] {
			return errors.New("生成时间选择的区间值不合理")
		}
		// 默认是毫秒
		req.CreatedAt[0] = req.CreatedAt[0] / 1000
		req.CreatedAt[1] = req.CreatedAt[1] / 1000
	}

	return nil
}

type AdminRoleListModel struct {
	ID          int64       `gorm:"column:id;primaryKey;autoIncrement:true" json:"id"` // 角色ID
	Name        string      `gorm:"column:name;not null" json:"name"`                  // 角色名称
	Key         string      `gorm:"column:key;not null" json:"key"`                    // 角色权限字符串
	Permissions interface{} `gorm:"column:permissions" json:"permissions"`             // 权限分配
	Pages       interface{} `gorm:"column:pages" json:"pages"`                         // 页面分配
	Systems     interface{} `gorm:"column:systems" json:"systems"`                     // 系统分配
	Remark      string      `gorm:"column:remark" json:"remark"`                       // 备注
	Sort        int32       `gorm:"column:sort;not null" json:"sort"`                  // 排序
	Status      int32       `gorm:"column:status;not null;default:1" json:"status"`    // 角色状态
	CreatedAt   time.Time   `gorm:"column:created_at" json:"created_at"`               // 创建时间
	UpdatedAt   time.Time   `gorm:"column:updated_at" json:"updated_at"`               // 更新时间
}

type AdminRoleEditReq struct {
	ID          int64             `gorm:"column:id;primaryKey;autoIncrement:true" json:"id"` // 角色ID
	Name        string            `gorm:"column:name;not null" json:"name"`                  // 角色名称
	Key         string            `gorm:"column:key;not null" json:"key"`                    // 角色权限字符串
	Remark      string            `gorm:"column:remark" json:"remark"`                       // 备注
	Sort        int32             `gorm:"column:sort;not null" json:"sort"`                  // 排序
	Status      int32             `gorm:"column:status;not null;default:1" json:"status"`    // 角色状态
	Permissions map[int32][]int32 `json:"permissions"`                                       // 权限分配
	Pages       map[int32][]int32 `json:"pages"`                                             // 页面分配
	Systems     []int32           `json:"systems"`                                           // 系统分配
}

type AdminRoleReq struct {
	ID int64 `json:"id" form:"id"`
}

type Menu struct {
	Id        int32     `json:"id"`
	Component string    `json:"component"`
	Meta      *MenuMeta `json:"meta"`
	Name      string    `json:"name"`
	Path      string    `json:"path"`
	Redirect  string    `json:"redirect"`
	Children  []*Menu   `json:"children"`
}

type MenuMeta struct {
	Icon       string `json:"icon"`
	Sort       int32  `json:"sort"`
	Title      string `json:"title"`
	Hidden     bool   `json:"hidden,omitempty"`
	ActiveMenu string `json:"activeMenu,omitempty"`
	IsRoot     bool   `json:"isRoot,omitempty"`
	IsSuper    bool   `json:"isSuper,omitempty"`
}
