"use strict";
'use client';
Object.defineProperty(exports, "__esModule", { value: true });
exports.UnifiedFilePicker = void 0;
const react_1 = require("react");
const PickerWrapper_1 = require("./components/PickerWrapper");
const Spinner_1 = require("./components/Spinner");
const config_1 = require("./config");
const pickers_1 = require("./pickers");
const types_1 = require("./types");
const usePostMessagePickerHandlers = () => {
    const [handlers, setPickerHandlers] = (0, react_1.useState)({});
    (0, react_1.useEffect)(() => {
        const handleMessage = (event) => {
            if (event.data?.type === 'SET_PICKER_HANDLERS') {
                setPickerHandlers((currentHandlers) => ({
                    ...currentHandlers,
                    ...event.data.handlers,
                }));
            }
        };
        window.addEventListener('message', handleMessage);
        return () => window.removeEventListener('message', handleMessage);
    }, []);
    return handlers;
};
const UnifiedFilePicker = ({ auth, options }) => {
    const [isInitialized, setIsInitialized] = (0, react_1.useState)(false);
    const [connectionDetails, setConnectionDetails] = (0, react_1.useState)(null);
    const [isLocalOpen, setIsLocalOpen] = (0, react_1.useState)(options.isOpen);
    // Get the latest handlers from postMessage
    const pickerHandlers = usePostMessagePickerHandlers();
    // Use the event handlers if they exist, otherwise fall back to props
    const handlers = {
        onClose: pickerHandlers.onClose || options.onClose,
        onSelect: pickerHandlers.onSelect || options.onSelect,
        setIsOpen: pickerHandlers.setIsOpen || setIsLocalOpen,
    };
    (0, react_1.useEffect)(() => {
        if (handlers.setIsOpen) {
            handlers.setIsOpen(options.isOpen ?? true);
        }
    }, [options.isOpen, handlers.setIsOpen]);
    const handleClose = () => {
        handlers.setIsOpen(false);
        handlers.onClose?.();
    };
    (0, react_1.useEffect)(() => {
        const initialize = async () => {
            try {
                const details = await (0, config_1.fetchConnectionDetails)(auth);
                setConnectionDetails(details);
                setIsInitialized(true);
            }
            catch (error) {
                console.error('Failed to initialize file picker:', error);
            }
        };
        initialize();
    }, [auth]);
    const themeColors = !options.theme || options.theme === 'light'
        ? types_1.defaultThemeColors
        : types_1.defaultDarkThemeColors;
    const mergedColors = {
        ...themeColors,
        ...Object.fromEntries(Object.entries(options.colors || {}).filter(([_, value]) => value && value !== '')),
    };
    if (!isInitialized && isLocalOpen) {
        return (<PickerWrapper_1.PickerWrapper isOpen={isLocalOpen} colors={mergedColors}>
        <div className="flex h-full items-center justify-center">
          <Spinner_1.Spinner color={mergedColors.accent}/>
        </div>
      </PickerWrapper_1.PickerWrapper>);
    }
    if (!isLocalOpen || !connectionDetails) {
        return null;
    }
    return (<PickerWrapper_1.PickerWrapper isOpen={isLocalOpen} colors={mergedColors}>
      {connectionDetails.type === 'sharepoint' ? (<pickers_1.SharePointPicker connectionDetails={connectionDetails} options={options} themeColors={mergedColors} onClose={handleClose}/>) : (<pickers_1.GoogleDrivePicker connectionDetails={connectionDetails} options={options} themeColors={mergedColors} onClose={handleClose}/>)}
    </PickerWrapper_1.PickerWrapper>);
};
exports.UnifiedFilePicker = UnifiedFilePicker;
//# sourceMappingURL=UnifiedFilePicker.jsx.map