import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { Transform } from 'class-transformer';
import { IsArray, IsIn, IsInt, IsOptional, IsString, IsUUID, Max, Min } from 'class-validator';

export const COMISION_ESTADOS = ['PENDIENTE', 'APROBADA', 'RECHAZADA', 'INCLUIDA_EN_LIQUIDACION'] as const;

export class ImportarComisionesDto {
  @ApiProperty()
  @Transform(({ value }) => parseInt(String(value), 10))
  @IsInt()
  @Min(2000)
  @Max(2100)
  periodo_anio!: number;

  @ApiProperty()
  @Transform(({ value }) => parseInt(String(value), 10))
  @IsInt()
  @Min(1)
  @Max(12)
  periodo_mes!: number;
}

export class QueryComisionesPendientesDto {
  @ApiProperty()
  @Transform(({ value }) => parseInt(String(value), 10))
  @IsInt()
  @Min(2000)
  @Max(2100)
  periodo_anio!: number;

  @ApiProperty()
  @Transform(({ value }) => parseInt(String(value), 10))
  @IsInt()
  @Min(1)
  @Max(12)
  periodo_mes!: number;

  @ApiPropertyOptional({ enum: COMISION_ESTADOS })
  @IsOptional()
  @IsString()
  @IsIn(COMISION_ESTADOS as unknown as string[])
  estado?: string;

  @ApiPropertyOptional()
  @IsOptional()
  @IsUUID()
  empleado_id?: string;
}

export class RechazarComisionDto {
  @ApiProperty({ description: 'Motivo del rechazo (obligatorio)' })
  @IsString()
  motivo!: string;
}

export class AprobarMasivoDto {
  @ApiProperty({ type: [String] })
  @IsArray()
  @IsUUID('4', { each: true })
  ids!: string[];
}

export class VincularEmpleadoDto {
  @ApiPropertyOptional({ description: 'Empleado RRHH a vincular. null/omitido desvincula.' })
  @IsOptional()
  @IsUUID()
  empleado_id?: string | null;
}
