package model

import (
	"time"
)

// PermissionLevel 权限级别
type PermissionLevel int

const (
	PermissionRead PermissionLevel = iota + 1
	PermissionWrite
	PermissionExecute
	PermissionAdmin
)

// Role 角色
type Role struct {
	ID          string           `json:"id" gorm:"primaryKey"`
	Name        string           `json:"name" gorm:"uniqueIndex"`
	Permissions []PermissionLevel `json:"permissions" gorm:"type:int[]"`
	CreatedAt   time.Time        `json:"created_at"`
	UpdatedAt   time.Time        `json:"updated_at"`
}

// User 用户
type User struct {
	ID        string    `json:"id" gorm:"primaryKey"`
	Username  string    `json:"username" gorm:"uniqueIndex;size:50;not null"`
	Password  string    `json:"-" gorm:"not null"`
	Email     string    `json:"email" gorm:"index"`
	RoleID    string    `json:"role_id" gorm:"size:50;not null"`
	Role      *Role    `json:"role,omitempty" gorm:"foreignKey:RoleID"`
	IsActive  bool      `json:"is_active" gorm:"default:true"`
	CreatedAt time.Time `json:"created_at"`
	UpdatedAt time.Time `json:"updated_at"`
}

// HasPermission 检查是否有权限
func (u *User) HasPermission(level PermissionLevel) bool {
	if u.Role == nil {
		return false
	}
	for _, p := range u.Role.Permissions {
		if p >= level {
			return true
		}
	}
	return false
}
