package forms

import (
	"errors"
	"time"
)

type UserLoginReq struct {
	UserName string `form:"user_name" json:"user_name" binding:"required,min=1,max=30"`
	Password string `form:"password" json:"password" binding:"required,min=1,max=40"`
}
type UserLoginRes struct {
	ID       int64  `json:"id"`
	UserName string `json:"user_name"`
	Nickname string `json:"nickname"`
	Status   int32  `json:"status"`
	Avatar   string `json:"avatar"`
	Token    string `json:"token"`
}

type UserRegisterReq struct {
	Nickname string `form:"nickname" json:"nickname" binding:"required,min=2,max=30"`
	UserName string `form:"user_name" json:"user_name" binding:"required,min=2,max=30"`
	Password string `form:"password" json:"password" binding:"required,min=6,max=40"`
}

type UserMeReq struct {
	ID          int64                  `json:"user_id"`
	UserName    string                 `json:"user_name"`
	RoleId      int64                  `json:"role_id"`
	Avatar      string                 `json:"avatar"`
	Nickname    string                 `json:"nickname"`
	Permissions []UserLoginPermissions `json:"permissions"`
	IsSuper     bool                   `json:"isSuper"`
}
type UserLoginPermissions struct {
	Label string `json:"label"    description:"标签"`
	Value string `json:"value"    description:"值"`
}

type AdminUserListReq 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 *AdminUserListReq) 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 AdminUserListModel struct {
	ID       int64  `gorm:"column:id;primaryKey;autoIncrement:true" json:"id"`
	RoleID   int64  `gorm:"column:role_id" json:"role_id"`
	UserName string `gorm:"column:user_name" json:"user_name"` // 用户名
	//PasswordDigest string    `gorm:"column:password_digest" json:"password_digest"` // 密码
	Nickname         string    `gorm:"column:nickname" json:"nickname"`                     // 昵称
	Mobile           string    `gorm:"column:mobile" json:"mobile"`                         // 手机号
	FeishuUserName   string    `gorm:"column:feishu_username" json:"feishu_username"`       // 飞书用户名
	FeishuEmployeeId string    `gorm:"column:feishu_employee_id" json:"feishu_employee_id"` // 飞书用户工号ID
	Avatar           string    `gorm:"column:avatar" json:"avatar"`
	Status           int32     `gorm:"column:status;default:1" json:"status"` // 状态
	CreatedAt        time.Time `gorm:"column:created_at" json:"created_at"`   // 创建时间
	UpdatedAt        time.Time `gorm:"column:updated_at" json:"updated_at"`   // 更新时间
	RoleName         string    `json:"roleName"`
}

type AdminUserEditReq struct {
	ID             int64  `gorm:"column:id;primaryKey;autoIncrement:true" json:"id"`
	RoleID         int64  `gorm:"column:role_id" json:"role_id"`
	UserName       string `gorm:"column:user_name" json:"user_name"`             // 用户名
	PasswordDigest string `gorm:"column:password_digest" json:"password_digest"` // 密码
	Password       string `gorm:"column:password" json:"password"`               // 密码
	Nickname       string `gorm:"column:nickname" json:"nickname"`               // 昵称
	Avatar         string `gorm:"column:avatar" json:"avatar"`
	Status         int32  `gorm:"column:status;default:1" json:"status"` // 状态
}

type AdminUserResetPasswordReq struct {
	ID       int64  `gorm:"column:id;primaryKey;autoIncrement:true" json:"id"`
	Password string `gorm:"column:password" json:"password"` // 密码
}

type AdminUserUpdatePasswordReq struct {
	NewPassword string `gorm:"column:newPassword" json:"newPassword"`
	OldPassword string `gorm:"column:oldPassword" json:"oldPassword"`
}

func (req *AdminUserUpdatePasswordReq) Check() error {
	if req.NewPassword == "" {
		return errors.New("新密码不能为空")
	}

	if req.OldPassword == "" {
		return errors.New("老密码不能为空")
	}

	if req.OldPassword == req.NewPassword {
		return errors.New("新老密码不能一样")
	}

	return nil
}
