import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import {
  IsUUID,
  IsOptional,
  IsString,
  IsArray,
  IsEnum,
} from 'class-validator';

export enum EstadoAsignacion {
  PENDIENTE = 'pendiente',
  EN_PROCESO = 'en_proceso',
  COBRADA = 'cobrada',
  PARCIAL = 'parcial',
  CANCELADA = 'cancelada',
}

export class AsignarFacturaDto {
  @ApiProperty({ description: 'ID de la factura a asignar' })
  @IsUUID()
  factura_id: string;

  @ApiProperty({ description: 'ID del cobrador asignado' })
  @IsUUID()
  cobrador_id: string;

  @ApiPropertyOptional({ description: 'Observaciones de la asignación' })
  @IsOptional()
  @IsString()
  observaciones?: string;
}

export class AsignarFacturasMasivoDto {
  @ApiProperty({ description: 'IDs de las facturas a asignar', type: [String] })
  @IsArray()
  @IsUUID('4', { each: true })
  factura_ids: string[];

  @ApiProperty({ description: 'ID del cobrador asignado' })
  @IsUUID()
  cobrador_id: string;

  @ApiPropertyOptional({ description: 'Observaciones de la asignación' })
  @IsOptional()
  @IsString()
  observaciones?: string;
}

export class ReasignarFacturaDto {
  @ApiProperty({ description: 'ID del nuevo cobrador' })
  @IsUUID()
  nuevo_cobrador_id: string;

  @ApiPropertyOptional({ description: 'Motivo de la reasignación' })
  @IsOptional()
  @IsString()
  motivo?: string;
}

export class UpdateEstadoAsignacionDto {
  @ApiProperty({ enum: EstadoAsignacion })
  @IsEnum(EstadoAsignacion)
  estado: EstadoAsignacion;

  @ApiPropertyOptional({ description: 'Observaciones del cambio de estado' })
  @IsOptional()
  @IsString()
  observaciones?: string;
}
