"use client"
import { useSearchParams } from "next/navigation"
import { useRef } from "react"

import { createHotelListingDataStore } from "@/stores/hotel-listing-data"

import { HotelListingDataContext } from "@/contexts/HotelListingData"

import HotelListingDataProviderContent from "./Content"

import type { HotelListingDataStore } from "@/types/contexts/hotel-listing-data"
import type { HotelListingDataProviderProps } from "@/types/providers/hotel-listing-data"

export default function HotelListingDataProvider({
  allHotels,
  allFilters,
  sortItems,
  children,
}: HotelListingDataProviderProps) {
  const storeRef = useRef<HotelListingDataStore>(undefined)
  const searchParams = useSearchParams()

  // eslint-disable-next-line react-hooks/refs
  if (!storeRef.current) {
    storeRef.current = createHotelListingDataStore({
      allHotels,
      allFilters,
      sortItems,
      searchParams,
    })
  }

  return (
    // eslint-disable-next-line react-hooks/refs
    <HotelListingDataContext.Provider value={storeRef.current}>
      <HotelListingDataProviderContent>
        {children}
      </HotelListingDataProviderContent>
    </HotelListingDataContext.Provider>
  )
}
