/**
 * 用户相关类型定义
 */

import type { UserStatus } from './auth'

// 重新导出 UserStatus 供外部使用
export type { UserStatus } from './auth'

/**
 * 用户信息
 */
export interface User {
  /** 用户 ID */
  id: number
  /** 用户名 */
  username: string
  /** 邮箱 */
  email: string
  /** 手机号 */
  phone: string
  /** 昵称 */
  nickname: string
  /** 头像 URL */
  avatar: string
  /** 性别：0-未知，1-男，2-女 */
  gender: 0 | 1 | 2
  /** 生日 */
  birthday: string
  /** 地区 */
  region: string
  /** 简介 */
  bio: string
  /** 用户状态 */
  status: UserStatus
  /** 最后登录时间 */
  last_login_at: string
  /** 最后登录 IP */
  last_login_ip: string
  /** 创建时间 */
  created_at: string
  /** 更新时间 */
  updated_at: string
}

/**
 * 用户列表查询参数
 */
export interface UserListParams {
  /** 页码 */
  page?: number
  /** 每页数量 */
  page_size?: number
  /** 关键词搜索 */
  keyword?: string
  /** 状态筛选 */
  status?: UserStatus
  /** 角色筛选（逗号分隔的角色 ID） */
  role_ids?: string
  /** 创建时间起始 */
  created_from?: string
  /** 创建时间结束 */
  created_to?: string
  /** 排序字段 */
  sort_by?: string
  /** 排序方向 */
  sort_order?: 'asc' | 'desc'
}

/**
 * 用户更新请求
 */
export interface UpdateUserRequest {
  /** 邮箱 */
  email?: string
  /** 手机号 */
  phone?: string
  /** 昵称 */
  nickname?: string
  /** 性别 */
  gender?: 0 | 1 | 2
  /** 生日 */
  birthday?: string
  /** 地区 */
  region?: string
  /** 简介 */
  bio?: string
}

export type CreatableUserStatus = 0 | 1 | 3

/**
 * 创建用户请求
 */
export interface CreateUserRequest {
  /** 用户名 */
  username: string
  /** 邮箱 */
  email?: string
  /** 手机号 */
  phone?: string
  /** 初始密码 */
  password: string
  /** 昵称 */
  nickname?: string
  /** 初始状态 */
  status?: CreatableUserStatus
  /** 初始角色 */
  role_ids?: number[]
  /** 创建后发送激活邮件 */
  send_activation_email?: boolean
}

/**
 * 用户状态更新请求
 */
export interface UpdateUserStatusRequest {
  /** 目标状态 */
  status: UserStatus
}

/**
 * 用户角色分配请求
 */
export interface AssignUserRolesRequest {
  /** 角色 ID 列表 */
  role_ids: number[]
}

/**
 * 用户状态文本映射
 */
export const UserStatusText: Record<UserStatus, string> = {
  0: '未激活',
  1: '已激活',
  2: '已锁定',
  3: '已禁用',
}

/**
 * 用户状态颜色映射（用于 AntD Tag）
 */
export const UserStatusColor: Record<UserStatus, string> = {
  0: 'default',
  1: 'success',
  2: 'warning',
  3: 'error',
}
