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

import { createDestinationDataStore } from "@/stores/destination-data"

import { DestinationDataContext } from "@/contexts/DestinationData"

import DestinationDataProviderContent from "./Content"

import type { DestinationDataStore } from "@/types/contexts/destination-data"
import type { DestinationDataProviderProps } from "@/types/providers/destination-data"

export default function DestinationDataProvider({
  allCities = [],
  allHotels,
  allFilters,
  sortItems,
  pathname,
  children,
}: DestinationDataProviderProps) {
  const storeRef = useRef<DestinationDataStore>(undefined)
  const searchParams = useSearchParams()

  if (!storeRef.current) {
    storeRef.current = createDestinationDataStore({
      allCities,
      allHotels,
      allFilters,
      pathname,
      sortItems,
      searchParams,
    })
  }

  return (
    <DestinationDataContext.Provider value={storeRef.current}>
      <DestinationDataProviderContent>
        {children}
      </DestinationDataProviderContent>
    </DestinationDataContext.Provider>
  )
}
