'use client'

import { useState, useCallback } from 'react'

/**
 * Unified folder selection interface.
 * - Electron environment: uses native dialog.showOpenDialog
 * - Web/server environment: opens ServerFolderPicker component
 */
export function useFolderDialog() {
    const [pickerOpen, setPickerOpen] = useState(false)
    const [pendingResolve, setPendingResolve] = useState<((path: string | null) => void) | null>(null)

    const openDialog = useCallback((): Promise<string | null> => {
        // Electron environment: use native dialog
        if (window.electronAPI?.openDirectoryDialog) {
            return window.electronAPI.openDirectoryDialog()
        }

        // Web environment: open ServerFolderPicker
        return new Promise<string | null>((resolve) => {
            setPickerOpen(true)
            setPendingResolve(() => resolve)
        })
    }, [])

    const handlePickerSelect = useCallback((path: string) => {
        pendingResolve?.(path)
        setPendingResolve(null)
    }, [pendingResolve])

    const handlePickerClose = useCallback(() => {
        setPickerOpen(false)
        pendingResolve?.(null)
        setPendingResolve(null)
    }, [pendingResolve])

    return {
        openDialog,
        pickerOpen,
        handlePickerSelect,
        handlePickerClose,
    }
}
