/**
 * 用户状态管理响应 DTO
 * 
 * 功能描述：
 * - 定义用户状态管理相关的响应数据结构
 * - 提供Swagger文档生成支持
 * - 确保状态管理API响应的数据格式一致性
 * 
 * 职责分离：
 * - 响应数据结构定义和类型约束
 * - API响应格式标准化和文档生成
 * - 错误信息和成功结果的统一封装
 * 
 * 最近修改：
 * - 2026-01-07: 代码规范优化 - 修正文件命名规范，完善注释规范，更新作者信息 (修改者: moyin)
 * 
 * @author moyin
 * @version 1.0.1
 * @since 2025-12-24
 * @lastModified 2026-01-07
 */

import { ApiProperty } from '@nestjs/swagger';
import { UserStatus } from './user_status.enum';

/**
 * 用户状态信息DTO
 */
export class UserStatusInfoDto {
  @ApiProperty({
    description: '用户ID',
    example: '1'
  })
  id: string;

  @ApiProperty({
    description: '用户名',
    example: 'testuser'
  })
  username: string;

  @ApiProperty({
    description: '用户昵称',
    example: '测试用户'
  })
  nickname: string;

  @ApiProperty({
    description: '用户状态',
    enum: UserStatus,
    example: UserStatus.ACTIVE
  })
  status: UserStatus;

  @ApiProperty({
    description: '状态描述',
    example: '正常'
  })
  status_description: string;

  @ApiProperty({
    description: '状态修改时间',
    example: '2025-12-24T10:00:00.000Z'
  })
  updated_at: Date;
}

/**
 * 用户状态修改响应数据DTO
 */
export class UserStatusDataDto {
  @ApiProperty({
    description: '用户信息',
    type: UserStatusInfoDto
  })
  user: UserStatusInfoDto;

  @ApiProperty({
    description: '修改原因',
    example: '用户违反社区规定',
    required: false
  })
  reason?: string;
}

/**
 * 用户状态修改响应DTO
 */
export class UserStatusResponseDto {
  @ApiProperty({
    description: '请求是否成功',
    example: true
  })
  success: boolean;

  @ApiProperty({
    description: '响应数据',
    type: UserStatusDataDto,
    required: false
  })
  data?: UserStatusDataDto;

  @ApiProperty({
    description: '响应消息',
    example: '用户状态修改成功'
  })
  message: string;

  @ApiProperty({
    description: '错误代码',
    example: 'USER_STATUS_UPDATE_FAILED',
    required: false
  })
  error_code?: string;
}

/**
 * 批量操作结果DTO
 */
export class BatchOperationResultDto {
  @ApiProperty({
    description: '成功处理的用户列表',
    type: [UserStatusInfoDto]
  })
  success_users: UserStatusInfoDto[];

  @ApiProperty({
    description: '处理失败的用户列表',
    type: [Object],
    example: [
      {
        user_id: '999',
        error: '用户不存在'
      }
    ]
  })
  failed_users: Array<{
    user_id: string;
    error: string;
  }>;

  @ApiProperty({
    description: '成功处理数量',
    example: 5
  })
  success_count: number;

  @ApiProperty({
    description: '失败处理数量',
    example: 1
  })
  failed_count: number;

  @ApiProperty({
    description: '总处理数量',
    example: 6
  })
  total_count: number;
}

/**
 * 批量用户状态修改响应数据DTO
 */
export class BatchUserStatusDataDto {
  @ApiProperty({
    description: '批量操作结果',
    type: BatchOperationResultDto
  })
  result: BatchOperationResultDto;

  @ApiProperty({
    description: '修改原因',
    example: '批量处理违规用户',
    required: false
  })
  reason?: string;
}

/**
 * 批量用户状态修改响应DTO
 */
export class BatchUserStatusResponseDto {
  @ApiProperty({
    description: '请求是否成功',
    example: true
  })
  success: boolean;

  @ApiProperty({
    description: '响应数据',
    type: BatchUserStatusDataDto,
    required: false
  })
  data?: BatchUserStatusDataDto;

  @ApiProperty({
    description: '响应消息',
    example: '批量用户状态修改完成'
  })
  message: string;

  @ApiProperty({
    description: '错误代码',
    example: 'BATCH_USER_STATUS_UPDATE_FAILED',
    required: false
  })
  error_code?: string;
}

/**
 * 用户状态统计DTO
 */
export class UserStatusStatsDto {
  @ApiProperty({
    description: '正常用户数量',
    example: 1250
  })
  active: number;

  @ApiProperty({
    description: '未激活用户数量',
    example: 45
  })
  inactive: number;

  @ApiProperty({
    description: '锁定用户数量',
    example: 12
  })
  locked: number;

  @ApiProperty({
    description: '禁用用户数量',
    example: 8
  })
  banned: number;

  @ApiProperty({
    description: '已删除用户数量',
    example: 3
  })
  deleted: number;

  @ApiProperty({
    description: '待审核用户数量',
    example: 15
  })
  pending: number;

  @ApiProperty({
    description: '总用户数量',
    example: 1333
  })
  total: number;
}

/**
 * 用户状态统计响应数据DTO
 */
export class UserStatusStatsDataDto {
  @ApiProperty({
    description: '用户状态统计',
    type: UserStatusStatsDto
  })
  stats: UserStatusStatsDto;

  @ApiProperty({
    description: '统计时间',
    example: '2025-12-24T10:00:00.000Z'
  })
  timestamp: string;
}

/**
 * 用户状态统计响应DTO
 */
export class UserStatusStatsResponseDto {
  @ApiProperty({
    description: '请求是否成功',
    example: true
  })
  success: boolean;

  @ApiProperty({
    description: '响应数据',
    type: UserStatusStatsDataDto,
    required: false
  })
  data?: UserStatusStatsDataDto;

  @ApiProperty({
    description: '响应消息',
    example: '用户状态统计获取成功'
  })
  message: string;

  @ApiProperty({
    description: '错误代码',
    example: 'USER_STATUS_STATS_FAILED',
    required: false
  })
  error_code?: string;
}