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

export class CreateApiKeyDto {
  @ApiProperty({
    description: 'Nom de la clé API (pour identification)',
    example: 'Intégration ERP Production',
    maxLength: 100,
  })
  @IsString()
  @IsNotEmpty()
  @MaxLength(100)
  name: string;

  @ApiPropertyOptional({
    description: "Date d'expiration de la clé (ISO 8601). Si absent, la clé n'expire pas.",
    example: '2027-01-01T00:00:00.000Z',
  })
  @IsOptional()
  @IsDateString()
  expiresAt?: string;
}

export class ApiKeyDto {
  @ApiProperty({ description: 'Identifiant unique de la clé', example: 'uuid-here' })
  id: string;

  @ApiProperty({ description: 'Nom de la clé', example: 'Intégration ERP Production' })
  name: string;

  @ApiProperty({
    description: 'Préfixe de la clé (pour identification visuelle)',
    example: 'xped_live_a1b2c3d4',
  })
  keyPrefix: string;

  @ApiProperty({ description: 'La clé est-elle active', example: true })
  isActive: boolean;

  @ApiPropertyOptional({
    description: 'Dernière utilisation de la clé',
    example: '2025-03-20T14:30:00.000Z',
  })
  lastUsedAt: Date | null;

  @ApiPropertyOptional({
    description: "Date d'expiration",
    example: '2027-01-01T00:00:00.000Z',
  })
  expiresAt: Date | null;

  @ApiProperty({ description: 'Date de création', example: '2025-03-26T10:00:00.000Z' })
  createdAt: Date;
}

export class CreateApiKeyResultDto extends ApiKeyDto {
  @ApiProperty({
    description:
      'Clé API complète — affichée UNE SEULE FOIS. Conservez-la en lieu sûr, elle ne sera plus visible.',
    example: 'xped_live_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2',
  })
  fullKey: string;
}
