import { z } from "zod";

import { stringOrEmpty } from "../nullable-defaults";
import { UserSchema } from "../user/user";

export const CheckoutIntentSchema = z
  .object({
    planId: z.string().min(1).max(120),
    autoRenew: z.boolean(),
    recipientCharacterId: z.string().min(1).max(80).optional(),
    commercialOfferId: z.string().min(1).max(80).optional(),
    chatActionId: z.uuid().optional(),
  })
  .readonly();

export const CheckoutHandoffCreateRequestSchema = CheckoutIntentSchema;

export const CheckoutHandoffCreateResponseSchema = z
  .object({
    externalUrl: z.url(),
    expiresAt: z.string().min(1),
  })
  .readonly();

export const CheckoutHandoffConsumeRequestSchema = z
  .object({
    handoffToken: z.string().min(32).max(512),
  })
  .readonly();

export const CheckoutHandoffConsumeResponseSchema = z
  .object({
    user: UserSchema,
    token: z.string().min(1),
    refreshToken: stringOrEmpty,
    loginStatus: z.enum([
      "email",
      "google",
      "facebook",
      "facebookMessenger",
    ]),
    checkoutIntent: CheckoutIntentSchema,
  })
  .readonly();

export type CheckoutIntent = z.output<typeof CheckoutIntentSchema>;
export type CheckoutHandoffCreateRequest = z.output<
  typeof CheckoutHandoffCreateRequestSchema
>;
export type CheckoutHandoffCreateResponse = z.output<
  typeof CheckoutHandoffCreateResponseSchema
>;
export type CheckoutHandoffConsumeRequest = z.output<
  typeof CheckoutHandoffConsumeRequestSchema
>;
export type CheckoutHandoffConsumeResponse = z.output<
  typeof CheckoutHandoffConsumeResponseSchema
>;
