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

export class DocumentosAsociadosDto {
  @ApiPropertyOptional({
    example: '1',
    description: 'Tipo de documento asociado (1=Electrónico, 2=Impreso, 3=Constancia Electrónica)',
  })
  @IsIn(['1', '2', '3', '4', '6', '7'], { message: 'iTipDocAso debe ser 1, 2, 3, 4, 6 o 7' })
  itipdocaso: string;

  @ApiPropertyOptional({
    example: '01800619676001002000032122025110916732838510',
    description: 'CDC del documento electrónico referenciado',
  })
  @IsOptional()
  @IsString()
  @Length(44, 44, { message: 'dCdCDERef debe tener 44 caracteres' })
  dcdcderef?: string;

  @ApiPropertyOptional({ description: 'Número de timbrado del documento impreso' })
  @IsOptional()
  @IsString()
  dntimdi?: string;

  @ApiPropertyOptional({ description: 'Establecimiento del documento impreso' })
  @IsOptional()
  @IsString()
  destdocaso?: string;

  @ApiPropertyOptional({ description: 'Punto de expedición del documento impreso' })
  @IsOptional()
  @IsString()
  dpexpdocaso?: string;

  @ApiPropertyOptional({ description: 'Número del documento impreso' })
  @IsOptional()
  @IsString()
  dnumdocaso?: string;

  @ApiPropertyOptional({ description: 'Tipo de documento impreso' })
  @IsOptional()
  @IsString()
  itipodocaso?: string;

  @ApiPropertyOptional({ description: 'Fecha de emisión del documento impreso' })
  @IsOptional()
  @IsString()
  dfecemidi?: string;

  @ApiPropertyOptional({ description: 'Tipo de constancia' })
  @IsOptional()
  @IsString()
  itipcons?: string;

  @ApiPropertyOptional({ description: 'Número de constancia' })
  @IsOptional()
  @IsString()
  dnumcons?: string;

  @ApiPropertyOptional({ description: 'Número de control de la constancia' })
  @IsOptional()
  @IsString()
  dnumcontrol?: string;

  @ApiPropertyOptional({ description: 'Número de resolución del comprobante fiscal' })
  @IsOptional()
  @IsString()
  dnumrescf?: string;

  @ApiPropertyOptional({ description: 'Número de comprobante de retención' })
  @IsOptional()
  @IsString()
  dnumcomret?: string;
}
