'use client'

import { useEffect } from 'react'
import { useUserSettingsStore } from '@/stores/user-settings/store'
import { useProductWorkspaceStore } from '@/stores/product-workspace/store'

interface ActiveSelectionHydratorProps {
  productId: string
}

/**
 * PBI-79: hydrateert de workspace-store met de actieve PBI/story die in
 * user-settings staan opgeslagen. Loopt na elke (re)hydratatie en bij
 * mutaties van de user-settings (bv. na sprint-switch). Wint van de
 * localStorage hint-restore — user-settings is de cross-device source of
 * truth.
 */
export function ActiveSelectionHydrator({ productId }: ActiveSelectionHydratorProps) {
  const hydrated = useUserSettingsStore((s) => s.context.hydrated)
  const persistedPbiId = useUserSettingsStore(
    (s) => s.entities.settings.layout?.activePbis?.[productId] ?? undefined,
  )
  const persistedStoryId = useUserSettingsStore(
    (s) => s.entities.settings.layout?.activeStories?.[productId] ?? undefined,
  )

  useEffect(() => {
    if (!hydrated) return
    const store = useProductWorkspaceStore.getState()
    // Schrijf alleen wanneer user-settings expliciet iets gekozen heeft
    // (key aanwezig met string-waarde). null-key betekent 'bewust leeg' →
    // we wissen lokale state. undefined-key (geen voorkeur) → niets doen.
    if (persistedPbiId === undefined && persistedStoryId === undefined) return

    if (persistedPbiId === null) {
      store.setActivePbi(null)
      return
    }
    if (persistedPbiId && store.context.activePbiId !== persistedPbiId) {
      store.setActivePbi(persistedPbiId)
    }
    if (persistedStoryId && store.context.activeStoryId !== persistedStoryId) {
      // setActivePbi triggert async cascade-restore die de oude hint kan
      // herstellen; de daarop volgende setActiveStory bumpt activeRequestId
      // en ongeldigt de cascade.
      store.setActiveStory(persistedStoryId)
    } else if (persistedStoryId === null) {
      store.setActiveStory(null)
    }
  }, [hydrated, persistedPbiId, persistedStoryId])

  return null
}
