import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { IsIn, IsOptional, IsString, MaxLength } from 'class-validator';

export class ApproveDto {
  @ApiPropertyOptional({ description: 'Comentario opcional del aprobador.' })
  @IsOptional()
  @IsString()
  @MaxLength(1000)
  comentario?: string;
}

export class RejectApprovalDto {
  @ApiPropertyOptional({ description: 'Motivo del rechazo de la aprobación.' })
  @IsOptional()
  @IsString()
  @MaxLength(1000)
  motivo?: string;
}

/** Canales por los que el cliente puede confirmar la aceptación fuera del portal. */
export const PRESUPUESTO_CANALES_ACEPTACION = [
  'TELEFONO',
  'VERBAL',
  'PRESENCIAL',
  'WHATSAPP',
  'EMAIL',
  'OTRO',
] as const;

export type PresupuestoCanalAceptacion = (typeof PRESUPUESTO_CANALES_ACEPTACION)[number];

export class MarkAcceptedDto {
  @ApiProperty({
    enum: PRESUPUESTO_CANALES_ACEPTACION,
    description: 'Canal por el que el cliente confirmó la aceptación.',
  })
  @IsIn(PRESUPUESTO_CANALES_ACEPTACION as unknown as string[])
  canal!: PresupuestoCanalAceptacion;

  @ApiPropertyOptional({ description: 'Nombre de la persona del cliente que confirmó.' })
  @IsOptional()
  @IsString()
  @MaxLength(200)
  confirmado_por?: string;

  @ApiPropertyOptional({ description: 'Detalle libre (nº de OC del cliente, referencia de la llamada, etc.).' })
  @IsOptional()
  @IsString()
  @MaxLength(1000)
  comentario?: string;
}
