"use client"

import { usePathname, useSearchParams } from "next/navigation"
import { useMemo } from "react"
import { useIntl } from "react-intl"

import { createRatesStore } from "@/stores/select-rate"

import { RatesContext } from "@/contexts/Rates"

import type { RatesProviderProps } from "@/types/providers/rates"

export default function RatesProvider({
  booking,
  children,
  hotelType,
  roomCategories,
  roomsAvailability,
  vat,
}: RatesProviderProps) {
  const pathname = usePathname()
  const searchParams = useSearchParams()
  const intl = useIntl()

  const modifyRateIndex = searchParams.has("modifyRateIndex")
    ? Number(searchParams.get("modifyRateIndex"))
    : undefined

  const store = useMemo(() => {
    return createRatesStore({
      booking,
      hotelType,
      labels: {
        accessibilityRoom: intl.formatMessage({
          defaultMessage: "Accessible room",
        }),
        allergyRoom: intl.formatMessage({
          defaultMessage: "Allergy-friendly room",
        }),
        petRoom: intl.formatMessage({
          defaultMessage: "Pet-friendly room",
        }),
      },
      pathname,
      roomCategories,
      roomsAvailability,
      vat,
      initialActiveRoom: modifyRateIndex,
    })
  }, [
    booking,
    hotelType,
    intl,
    pathname,
    roomCategories,
    roomsAvailability,
    modifyRateIndex,
    vat,
  ])

  return <RatesContext.Provider value={store}>{children}</RatesContext.Provider>
}
