import { appWindow } from "@tauri-apps/api/window";
import { register, unregisterAll, isRegistered } from "@tauri-apps/api/globalShortcut";
import { useEffect } from "react";
import { store } from "@store";
import { useHotkeys } from "@logics_configs";

// 修飾キーのパースを行う関数
const parseHotkey = (hotkeyString) => {
    const keyMap = {
        Ctrl: "Control",
        Alt: "Alt",
        Shift: "Shift",
        Meta: "Super",
    };

    // 入力文字列を分解して対応するキーを再結合
    return hotkeyString
        .map((key) => keyMap[key] || key) // 修飾キーをマップし、その他はそのまま
        .join("+");
};

export const GlobalHotKeyController = () => {
    const { currentHotkeys } = useHotkeys();

    useEffect(() => {
        const registerShortcuts = async () => {
            const shortcut_raw = currentHotkeys.data.toggle_active_vrct;
            console.log(shortcut_raw);

            if (!shortcut_raw) {
                console.warn("No hotkey defined.");
                return;
            }

            const shortcut = parseHotkey(shortcut_raw);

            try {
                // 既存のショートカットをすべて解除
                await unregisterAll();

                // 新しいショートカットを登録
                const isAlreadyRegistered = await isRegistered(shortcut);
                if (!isAlreadyRegistered) {
                    await register(shortcut, async () => {
                        console.log(`Shortcut "${shortcut}" triggered, setting focus.`);
                        const minimized = await appWindow.isMinimized();
                        if (minimized === true) {
                            appWindow.unminimize();
                            await appWindow.setFocus();
                            store.text_area_ref.current?.focus();
                        } else {
                            appWindow.minimize();
                        }
                    });
                    console.log(`Registered global shortcut: ${shortcut}`);
                }
            } catch (error) {
                console.error("Failed to register global shortcut:", error);
            }
        };

        registerShortcuts();

        // クリーンアップ関数でショートカットを解除
        return () => {
            unregisterAll().catch((error) => {
                console.error("Failed to unregister shortcuts:", error);
            });
        };
    }, [currentHotkeys.data.toggle_active_vrct]); // 監視対象を明確に指定

    return null;
};
