"use client";

import * as React from "react";

type Handler = (e: KeyboardEvent) => void;

export function useShortcut(combo: string, handler: Handler, options?: { enabled?: boolean }) {
  const enabled = options?.enabled ?? true;
  React.useEffect(() => {
    if (!enabled) return;
    const parts = combo.toLowerCase().split("+").map((p) => p.trim());
    const needsCmd = parts.includes("mod") || parts.includes("cmd") || parts.includes("ctrl");
    const needsShift = parts.includes("shift");
    const key = parts[parts.length - 1] ?? "";
    function onKey(e: KeyboardEvent) {
      // Modifier state must match exactly: cmd/ctrl required iff in combo, same for shift.
      const cmdPressed = e.metaKey || e.ctrlKey;
      if (needsCmd !== cmdPressed) return;
      if (needsShift !== e.shiftKey) return;
      if (e.key.toLowerCase() !== key) return;
      handler(e);
    }
    window.addEventListener("keydown", onKey);
    return () => window.removeEventListener("keydown", onKey);
  }, [combo, handler, enabled]);
}
