/**
 * 用户审批相关类型定义（精简版）
 */

/**
 * 注销申请状态枚举
 */
export enum LogoutRequestStatus {
  /** 待审核 */
  PENDING = '0',
  /** 已通过 */
  APPROVED = '1'
  // 注：驳回的申请会被直接删除，无需状态
}

/**
 * 注销申请状态标签映射
 */
export const LOGOUT_REQUEST_STATUS_LABELS = {
  [LogoutRequestStatus.PENDING]: '待审核',
  [LogoutRequestStatus.APPROVED]: '已通过'
} as const;

/**
 * 注销申请状态标签类型映射
 */
export const LOGOUT_REQUEST_STATUS_TAG_TYPES = {
  [LogoutRequestStatus.PENDING]: 'warning',
  [LogoutRequestStatus.APPROVED]: 'success'
} as const;

/**
 * 用户注销申请查询参数
 */
export interface LogoutRequestQuery extends PageQuery {
  /** 申请注销的用户ID */
  userId?: number;
  /** 申请人ID */
  applyUserId?: number;
  /** 申请原因（模糊搜索） */
  applyReason?: string;
  /** 申请状态 */
  status?: string;
  /** 审核人ID */
  approveUserId?: number;
  /** 申请时间范围 */
  beginApplyTime?: string;
  endApplyTime?: string;
  /** 审核时间范围 */
  beginApproveTime?: string;
  endApproveTime?: string;
  deptId?: string;
}

/**
 * 用户注销申请视图对象
 */
export interface LogoutRequestVO extends BaseEntity {
  /** ID */
  id: number;
  /** 申请注销的用户ID */
  userId: number;
  /** 申请注销的用户名 */
  userName: string;
  /** 申请注销的用户昵称 */
  nickName: string;
  /** 申请注销的真实姓名 */
  realName: string;
  /** 申请注销的用户部门名称 */
  deptName: string;
  /** 申请人ID */
  applyUserId: number;
  /** 申请人用户名 */
  applyUserName: string;
  /** 申请人昵称 */
  applyUserNickName: string;
  /** 申请原因 */
  applyReason: string;
  /** 申请时间 */
  applyTime: Date;
  /** 申请状态 */
  status: string;
  /** 申请状态名称 */
  statusName: string;
  /** 审核人ID */
  approveUserId?: number;
  /** 审核人用户名 */
  approveUserName?: string;
  /** 审核人昵称 */
  approveUserNickName?: string;
  /** 审核时间 */
  approveTime?: Date;
  /** 审核意见 */
  approveRemark?: string;
  /** 备注 */
  remark?: string;
  /** 是否为本人申请 */
  isSelfApply?: boolean;
}

/**
 * 用户注销申请表单
 */
export interface LogoutRequestForm {
  /** ID */
  id?: string;
  /** 申请注销的用户ID */
  userId: string;
  /** 申请原因 */
  applyReason: string;
  /** 备注 */
  remark?: string;
}

/**
 * 批量注销申请审批表单
 */
export interface BatchLogoutApprovalForm {
  /** 申请ID列表 */
  ids: string[];
  /** 是否通过 */
  approve: boolean;
  /** 审批意见 */
  approveRemark?: string;
}

// ==================== 用户激活审批相关类型 ====================

/**
 * 用户审批查询参数
 */
export interface UserApprovalQuery extends PageQuery {
  /** 用户名称 */
  userName?: string;
  /** 状态 */
  status?: string;
  /** 创建时间范围 */
  beginTime?: string;
  endTime?: string;
  deptId?: string;
}

/**
 * 用户审批列表视图对象
 */
export interface SysUserApprovalListVo {
  // ========== 基本信息 ==========
  /** 用户ID */
  userId: string | number;
  /** 部门ID */
  deptId: number;
  /** 部门名称 */
  deptName: string;
  /** 用户账号 */
  userName: string;
  /** 用户昵称 */
  nickName: string;
  /** 真实姓名 */
  realName: string;
  /** 用户邮箱 */
  email: string;
  /** 手机号码 */
  phonenumber: string;
  /** 用户性别（0男 1女 2未知） */
  sex: string;
  /** 证件号码 */
  idNo: string;
  /** 帐号状态（0正常 1停用 2待激活 3休眠 4注销） */
  status: string;
  /** 创建时间 */
  createTime: Date;
  /** 备注 */
  remark: string;

  // ========== 角色权限信息 ==========
  /** 用户角色类型 */
  roleType: string;
  /** 用户角色类型名称 */
  roleTypeName: string;
  /** 渠道类型 */
  branchType: string;
  /** 渠道类型名称 */
  branchTypeName: string;
  /** 角色名称列表（逗号分隔） */
  roleNames: string;

  // ========== 账户信息 ==========
  /** 账户类型（0长期 1临时） */
  accType: number;
  /** 账户类型名称 */
  accTypeName: string;
  /** 系统内置 Y-是 N-否 */
  sysType: string;

  // ========== 安全设置 ==========
  /** 账号绑定IP */
  bindIp: string;
  /** 是否需要人脸识别（0-不需要 1-需要） */
  faceAuthRequired: string;

  // ========== 时间字段 ==========
  /** 访问时间字符串（格式：start,end） */
  accessTimeStr?: string;
  /** 有效期字符串（格式：start,end） */
  validDateStr?: string;

  // ========== 便捷方法 ==========
  /** 获取访问时间数组 */
  getAccessTime(): string[] | null;
  /** 获取有效期数组 */
  getValidDate(): string[] | null;
}

/**
 * 用户审批详情视图对象
 */
export interface UserApprovalDetailVO extends BaseEntity {
  // ========== 基本信息 ==========
  userId: string | number;
  deptId: number;
  userName: string;
  nickName: string;
  realName: string;
  email: string;
  phonenumber: string;
  sex: string;
  idNo: string;
  status: string;
  remark: string;

  // ========== 安全设置 ==========
  bindIp: string;
  accessTime: string[];
  accType: number;
  validDate: string[];
  faceAuthRequired: string;

  // ========== 组织信息 ==========
  deptName: string;
  branchType: string;
  roleType: string;
  sysType: string;

  // ========== 权限信息 ==========
  roles: any[];
  menuTree: any[];
  checkedMenuIds: (string | number)[];
}

/**
 * 用户批量审批BO
 */
export interface UserBatchApprovalBO {
  /** 用户ID列表 */
  userIds: string[];
  /** 审批意见 */
  approvalRemark?: string;
}

// ==================== 工具函数 ====================

/**
 * 工具函数：获取注销申请状态标签
 */
export const getLogoutRequestStatusLabel = (status: string): string => {
  return LOGOUT_REQUEST_STATUS_LABELS[status as keyof typeof LOGOUT_REQUEST_STATUS_LABELS] || '未知状态';
};

/**
 * 工具函数：获取注销申请状态标签类型
 */
export const getLogoutRequestStatusTagType = (status: string): string => {
  return LOGOUT_REQUEST_STATUS_TAG_TYPES[status as keyof typeof LOGOUT_REQUEST_STATUS_TAG_TYPES] || '';
};

/**
 * 工具函数：检查是否可以删除申请（仅限已处理的申请）
 */
export const canDeleteLogoutRequest = (request: LogoutRequestVO): boolean => {
  return request.status !== LogoutRequestStatus.PENDING;
};
