/**
 * 系统用户接口定义
 * 作者: 阿瑞
 * 功能: 定义系统用户数据模型结构
 * 版本: 1.0
 */

/**
 * 用户状态枚举
 */
export enum UserStatus {
  DISABLED = 0,
  ENABLED = 1
}

/**
 * 系统用户接口
 */
export interface ISystemUser {
  id: number;             // 用户ID（主键）
  username: string;       // 登录用户名（唯一）
  password: string;       // 加密密码
  email: string;          // 电子邮箱（唯一）
  phone: string;          // 手机号码（唯一）
  workspace_id: number;   // 所属工作空间ID
  role_type: string;      // 角色类型
  role_name: string;      // 角色显示名称
  is_custom_role: boolean; // 是否自定义角色
  status: UserStatus;     // 状态（1=启用，0=禁用）
  invited_by?: number;    // 邀请人ID（NULL表示自主注册）
  invitation_token?: string; // 邀请验证令牌
  last_login_at?: Date;   // 最后登录时间
  created_at: Date;       // 创建时间
  updated_at?: Date;      // 更新时间
}

/**
 * 创建系统用户请求参数
 */
export interface ICreateSystemUserParams {
  username: string;       // 登录用户名
  password: string;       // 密码
  email: string;          // 电子邮箱
  phone: string;          // 手机号码
  workspace_id: number;   // 所属工作空间ID
  role_type: string;      // 角色类型
  role_name?: string;     // 角色显示名称
  is_custom_role?: boolean; // 是否自定义角色
  status?: UserStatus;    // 状态
  invited_by?: number;    // 邀请人ID
  invitation_token?: string; // 邀请验证令牌
}

/**
 * 更新系统用户请求参数
 */
export interface IUpdateSystemUserParams {
  username?: string;      // 登录用户名
  password?: string;      // 密码
  email?: string;         // 电子邮箱
  phone?: string;         // 手机号码
  workspace_id?: number;  // 所属工作空间ID
  role_type?: string;     // 角色类型
  role_name?: string;     // 角色显示名称
  is_custom_role?: boolean; // 是否自定义角色
  status?: UserStatus;    // 状态
  last_login_at?: Date;   // 最后登录时间
}

/**
 * 用户登录参数
 */
export interface IUserLoginParams {
  username: string;       // 用户名
  password: string;       // 密码
}

/**
 * 简单用户信息接口（不含敏感信息）
 */
export interface ISimpleUserInfo {
  id: number;             // 用户ID
  username: string;       // 用户名
  email: string;          // 电子邮箱
  phone: string;          // 手机号码
  role_name: string;      // 角色显示名称
  workspace_id: number;   // 所属工作空间ID
}

/**
 * 用户详情接口（包含关联信息，不含敏感数据）
 */
export type IUserDetail = Omit<ISystemUser, 'password' | 'invitation_token'> & {
  workspace_name?: string; // 工作空间名称
  teams_count?: number;    // 用户所属团队数量
  created_by?: string;     // 创建者用户名（若有）
} 