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

// ── Caso de uso: Crear una ruta de cobranza diaria ─────────────────────
// El supervisor planifica la ruta del cobrador para un día específico,
// opcionalmente asignando facturas en orden de visita.
export class CreateRutaCobranzaDto {
  @ApiProperty({ description: 'ID del cobrador asignado a la ruta' })
  @IsUUID()
  cobrador_id: string;

  @ApiProperty({ description: 'Fecha de la ruta (YYYY-MM-DD)' })
  @IsDateString()
  fecha: string;

  @ApiPropertyOptional({ description: 'Observaciones o instrucciones para el cobrador' })
  @IsOptional()
  @IsString()
  observaciones?: string;

  @ApiPropertyOptional({
    description: 'IDs de asignaciones de facturas a incluir en la ruta, en orden de visita',
    type: [String],
  })
  @IsOptional()
  @IsArray()
  @IsUUID('4', { each: true })
  asignacion_factura_ids?: string[];
}

// ── Caso de uso: Actualizar estado de la ruta ──────────────────────────
// El cobrador inicia su ruta (en_curso), la completa o el supervisor la cancela.
export class UpdateRutaEstadoDto {
  @ApiProperty({
    description: 'Nuevo estado de la ruta',
    enum: ['planificada', 'en_curso', 'completada', 'cancelada'],
  })
  @IsString()
  estado: string;

  @ApiPropertyOptional({ description: 'Observaciones adicionales' })
  @IsOptional()
  @IsString()
  observaciones?: string;
}

// ── Caso de uso: Agregar facturas a una ruta existente ─────────────────
export class AgregarFacturasRutaDto {
  @ApiProperty({ description: 'IDs de asignaciones de facturas a agregar', type: [String] })
  @IsArray()
  @IsUUID('4', { each: true })
  asignacion_factura_ids: string[];

  @ApiPropertyOptional({ description: 'Orden de inicio para las nuevas facturas' })
  @IsOptional()
  @IsInt()
  @Min(0)
  orden_inicio?: number;
}
