import type {
  Ancillary,
  SelectedAncillary,
} from "@/types/components/myPages/myStay/ancillaries"
import type { AncillaryFormData } from "@/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/schema"
import type { BreakfastData } from "@/stores/my-stay/add-ancillary-flow"

export const generateDeliveryOptions = () => {
  const timeSlots = ["16:00-17:00", "17:00-18:00", "18:00-19:00", "19:00-20:00"]

  return timeSlots.map((slot) => ({
    label: slot,
    value: slot,
  }))
}

export function buildAncillaryPackages(
  data: AncillaryFormData,
  ancillary: SelectedAncillary | null
) {
  const packages = []

  if (ancillary?.id && data.quantityWithCard) {
    packages.push({
      code: ancillary.id,
      quantity: data.quantityWithCard,
      comment: data.optionalText || undefined,
    })
  }

  if (ancillary?.loyaltyCode && data.quantityWithPoints) {
    packages.push({
      code: ancillary.loyaltyCode,
      quantity: data.quantityWithPoints,
      comment: data.optionalText || undefined,
    })
  }

  return packages
}

const ancillarySessionKey = "ancillarySessionData"
export const getAncillarySessionData = ():
  | {
      formData?: AncillaryFormData
      selectedAncillary?: Ancillary["ancillaryContent"][number] | null
      packages: {
        code: string
        quantity: number
        comment: string | undefined
      }[]
      isBreakfast: boolean
      breakfastData: BreakfastData | null
    }
  | undefined => {
  if (typeof window === "undefined") return undefined

  try {
    const storedData = sessionStorage.getItem(ancillarySessionKey)
    return storedData ? JSON.parse(storedData) : undefined
  } catch (error) {
    console.error("Error reading from session storage:", error)
    return undefined
  }
}

export function setAncillarySessionData({
  formData,
  selectedAncillary,
  packages,
  isBreakfast,
  breakfastData,
}: {
  formData?: AncillaryFormData
  selectedAncillary?: Ancillary["ancillaryContent"][number] | null
  packages: {
    code: string
    quantity: number
    comment: string | undefined
  }[]
  isBreakfast: boolean
  breakfastData: BreakfastData | null
}) {
  if (typeof window === "undefined") return
  try {
    const currentData = getAncillarySessionData() || {}
    sessionStorage.setItem(
      ancillarySessionKey,
      JSON.stringify({
        ...currentData,
        formData,
        selectedAncillary,
        packages,
        isBreakfast,
        breakfastData,
      })
    )
  } catch (error) {
    console.error("Error writing to session storage:", error)
  }
}

export function clearAncillarySessionData() {
  if (typeof window === "undefined") return
  sessionStorage.removeItem(ancillarySessionKey)
}
