import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';

export class ApiResponseMetaDto {
  @ApiPropertyOptional({ type: String })
  requestId?: string;

  @ApiProperty({ type: String, example: '2026-01-15T12:00:00.000Z' })
  timestamp!: string;

  @ApiProperty({ type: String, example: '/api/monitoring/cp/assembly' })
  path!: string;

  @ApiProperty({ type: String, example: 'GET' })
  method!: string;

  @ApiProperty({ type: Number })
  statusCode!: number;

  @ApiPropertyOptional({
    type: Number,
    description: 'Request duration in milliseconds',
  })
  duration?: number;
}

export class ApiSuccessResponseDto<T = unknown> {
  @ApiProperty({ enum: [true] })
  success!: true;

  @ApiProperty({ type: Object })
  data!: T;

  @ApiPropertyOptional({ type: ApiResponseMetaDto })
  meta?: ApiResponseMetaDto;
}

export class ApiErrorDetailDto {
  @ApiProperty({ type: String })
  code!: string;

  @ApiProperty({ type: String })
  message!: string;
}

export class ApiErrorResponseDto {
  @ApiProperty({ enum: [false] })
  success!: false;

  @ApiProperty({ type: ApiErrorDetailDto })
  error!: ApiErrorDetailDto;

  @ApiPropertyOptional({ type: ApiResponseMetaDto })
  meta?: ApiResponseMetaDto;
}
