import { ApiProperty } from "@nestjs/swagger";
import { IsInt, IsObject, IsOptional, IsString, IsUrl, Max, Min } from "class-validator";

export class CreateCheckoutSessionDto {
  @ApiProperty({
    example: "pi_01HXYZABCDEFGHJKMNPQRSTV",
    description: "ID del payment intent que esta sesión va a cobrar. Debe pertenecer al merchant autenticado.",
  })
  @IsString()
  intentId!: string;

  @ApiProperty({
    required: false,
    example: "https://merchant.com/orders/123/success",
    description: "URL a la que el hosted checkout redirige tras pago aprobado.",
  })
  @IsOptional()
  @IsUrl({ require_protocol: true, require_tld: false })
  returnUrl?: string;

  @ApiProperty({
    required: false,
    example: "https://merchant.com/orders/123/cancel",
    description: "URL a la que se redirige si el comprador cancela.",
  })
  @IsOptional()
  @IsUrl({ require_protocol: true, require_tld: false })
  cancelUrl?: string;

  @ApiProperty({
    required: false,
    example: 24,
    description: "Horas hasta que la sesión expire. Default: `CHECKOUT_SESSION_DEFAULT_EXPIRATION_HOURS` (env).",
  })
  @IsOptional()
  @IsInt()
  @Min(1)
  @Max(168)
  expirationHours?: number;

  @ApiProperty({
    required: false,
    description:
      "Configuración de la página de pago. `locale`/`brandColor` para branding; " +
      "`qrEmbedded: true` hace que el QR directo se dibuje embebido en el checkout en vez de redirigir a la página del provider.",
    example: { locale: "es-PY", brandColor: "#1976d2", qrEmbedded: true },
  })
  @IsOptional()
  @IsObject()
  uiConfig?: Record<string, unknown>;
}
