import { ApiProperty } from "@nestjs/swagger";
import { ApiKeyEnvironment, ApiKeyScope, ApiKeyType } from "@prisma/client";
import { IsEnum, IsOptional, IsString, Length } from "class-validator";

export class CreateApiKeyDto {
  @ApiProperty({
    enum: ApiKeyType,
    example: ApiKeyType.secret,
    description:
      "`secret` (`sk_*`) para uso server-to-server. `publishable` (`pk_*`) para clientes públicos (drop-in SDK).",
  })
  @IsEnum(ApiKeyType)
  type!: ApiKeyType;

  @ApiProperty({ enum: ApiKeyEnvironment, example: ApiKeyEnvironment.test })
  @IsEnum(ApiKeyEnvironment)
  environment!: ApiKeyEnvironment;

  @ApiProperty({
    required: false,
    enum: ApiKeyScope,
    example: ApiKeyScope.full,
    description: "Default: `full`. Usar `restricted` para keys con permisos acotados.",
  })
  @IsOptional()
  @IsEnum(ApiKeyScope)
  scope?: ApiKeyScope;

  @ApiProperty({
    required: false,
    example: "Backend de producción",
    description: "Etiqueta libre para identificar el uso de la key.",
  })
  @IsOptional()
  @IsString()
  @Length(1, 80)
  label?: string;
}
