import { ApiProperty } from '@nestjs/swagger';
import {
  IsString,
  IsNotEmpty,
  IsOptional,
  IsEnum,
  IsDateString,
  IsBoolean,
  MinLength,
  MaxLength,
} from 'class-validator';
import { GenreType } from 'src/entities/children.entity';

export class EnfantInscriptionDto {
  @ApiProperty({ example: 'Emma', required: false, description: 'Prénom de l\'enfant (obligatoire si déjà né)' })
  @IsOptional()
  @IsString()
  @MinLength(2, { message: 'Le prénom doit contenir au moins 2 caractères' })
  @MaxLength(100, { message: 'Le prénom ne peut pas dépasser 100 caractères' })
  prenom?: string;

  @ApiProperty({ example: 'MARTIN', required: false, description: 'Nom de l\'enfant (hérité des parents si non fourni)' })
  @IsOptional()
  @IsString()
  @MinLength(2, { message: 'Le nom doit contenir au moins 2 caractères' })
  @MaxLength(100, { message: 'Le nom ne peut pas dépasser 100 caractères' })
  nom?: string;

  @ApiProperty({ example: '2023-02-15', required: false, description: 'Date de naissance (si enfant déjà né)' })
  @IsOptional()
  @IsDateString()
  date_naissance?: string;

  @ApiProperty({ example: '2025-06-15', required: false, description: 'Date prévisionnelle de naissance (si enfant à naître)' })
  @IsOptional()
  @IsDateString()
  date_previsionnelle_naissance?: string;

  @ApiProperty({ enum: GenreType, example: GenreType.F })
  @IsEnum(GenreType, { message: 'Le genre doit être H, F ou Autre' })
  @IsNotEmpty({ message: 'Le genre est requis' })
  genre: GenreType;

  @ApiProperty({ 
    example: 'data:image/jpeg;base64,/9j/4AAQSkZJRg...', 
    required: false,
    description: 'Photo de l\'enfant en base64 (obligatoire si déjà né)'
  })
  @IsOptional()
  @IsString()
  photo_base64?: string;

  @ApiProperty({ example: 'emma_martin.jpg', required: false, description: 'Nom du fichier photo' })
  @IsOptional()
  @IsString()
  photo_filename?: string;

  @ApiProperty({ example: false, required: false, description: 'Grossesse multiple (jumeaux, triplés, etc.)' })
  @IsOptional()
  @IsBoolean()
  grossesse_multiple?: boolean;

  @ApiProperty({
    example: true,
    required: false,
    description: 'Consentement affichage / stockage photo (colonne enfants.consentement_photo)',
  })
  @IsOptional()
  @IsBoolean()
  consent_photo?: boolean;
}

