import { z } from "zod"

import { countriesMap } from "@/components/TempDesignSystem/Form/Country/countries"

export const getUserSchema = z.object({
  address: z.object({
    city: z.string().optional(),
    country: z.nativeEnum(countriesMap).optional(),
    streetAddress: z.string().optional(),
    zipCode: z.string(),
  }),
  dateOfBirth: z.string(),
  email: z.string().email(),
  firstName: z.string(),
  language: z.string(),
  lastName: z.string(),
  membership: z
    .object({
      currentPoints: z.number(),
      expirationDate: z.string(),
      membershipNumber: z.string(),
      memberSince: z.string(),
    })
    .optional(),
  phoneNumber: z.string(),
  profileId: z.string(),
})

// Schema is the same for upcoming and previous stays endpoints
export const getStaysSchema = z.object({
  data: z.array(
    z.object({
      attributes: z.object({
        hotelOperaId: z.string(),
        hotelInformation: z.object({
          hotelContent: z.object({
            images: z.object({
              metaData: z.object({
                title: z.string(),
                altText: z.string(),
                altText_En: z.string(),
                copyRight: z.string(),
              }),
              imageSizes: z.object({
                tiny: z.string(),
                small: z.string(),
                medium: z.string(),
                large: z.string(),
              }),
            }),
          }),
          hotelName: z.string(),
          cityName: z.string().nullable(),
        }),
        confirmationNumber: z.string(),
        checkinDate: z.string(),
        checkoutDate: z.string(),
        isWebAppOrigin: z.boolean(),
      }),
      relationships: z.object({
        hotel: z.object({
          links: z.object({
            related: z.string(),
          }),
          data: z.object({
            id: z.string(),
            type: z.string(),
          }),
        }),
      }),
      type: z.string(),
      id: z.string(),
      links: z.object({
        self: z.object({
          href: z.string(),
          meta: z.object({
            method: z.string(),
          }),
        }),
      }),
    })
  ),
  links: z
    .object({
      self: z.string(),
      offset: z.number(),
      limit: z.number(),
      totalCount: z.number(),
    })
    .nullable(),
})

type GetStaysData = z.infer<typeof getStaysSchema>

export type Stay = GetStaysData["data"][number]
