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

export class CreateGestionMoraDto {
  @ApiProperty()
  @IsUUID()
  cliente_id: string;

  @ApiProperty({ enum: CobMoraEstado })
  @IsEnum(CobMoraEstado)
  estado_inicial: CobMoraEstado;

  @ApiProperty()
  @IsNumber()
  @Min(0)
  monto_involucrado: number;

  @ApiProperty({ type: [String], description: 'IDs de facturas afectadas' })
  @IsArray()
  @IsUUID('all', { each: true })
  factura_ids: string[];

  @ApiPropertyOptional()
  @IsOptional()
  @IsString()
  observacion?: string;

  @ApiPropertyOptional()
  @IsOptional()
  @IsString()
  documento_url?: string;
}

export class TransicionEstadoDto {
  @ApiProperty({ enum: CobMoraEstado })
  @IsEnum(CobMoraEstado)
  estado_nuevo: CobMoraEstado;

  @ApiProperty()
  @IsString()
  motivo: string;

  @ApiPropertyOptional()
  @IsOptional()
  @IsString()
  documento_url?: string;

  @ApiPropertyOptional({ description: 'Usuario que autoriza (DEMANDA/INCOBRABLE)' })
  @IsOptional()
  @IsUUID()
  autorizado_por_id?: string;
}

export class QueryGestionMoraDto {
  @ApiPropertyOptional()
  @IsOptional()
  @IsUUID()
  cliente_id?: string;

  @ApiPropertyOptional({ enum: CobMoraEstado })
  @IsOptional()
  @IsEnum(CobMoraEstado)
  estado?: CobMoraEstado;

  @ApiPropertyOptional({ description: 'Búsqueda por nombre/razón social/RUC del cliente' })
  @IsOptional()
  @IsString()
  search?: string;

  @ApiPropertyOptional({ description: 'Fecha desde (YYYY-MM-DD) sobre fecha_ingreso' })
  @IsOptional()
  @IsString()
  desde?: string;

  @ApiPropertyOptional({ description: 'Fecha hasta (YYYY-MM-DD) sobre fecha_ingreso' })
  @IsOptional()
  @IsString()
  hasta?: string;

  @ApiPropertyOptional({ default: 1 })
  @IsOptional()
  page?: number;

  @ApiPropertyOptional({ default: 50 })
  @IsOptional()
  limit?: number;
}
