import { readTextFromClipboard } from "@/lib/clipboard";

/** Normalize clipboard / pasted text (BOM, whitespace). */
export function normalizePastedText(text: string): string {
  return text.replace(/^\uFEFF/, "").trim();
}

/**
 * Read plain text from a native paste event (Ctrl+V / context menu).
 * Falls back to text/html when text/plain is empty (common in some browsers / rich copy sources).
 */
export function extractTextFromClipboardEvent(event: ClipboardEvent): string {
  const data = event.clipboardData;
  if (!data) return "";

  const plain = data.getData("text/plain") || data.getData("text") || "";
  if (plain.trim()) return plain;

  const html = data.getData("text/html");
  if (html.trim()) {
    try {
      const el = document.createElement("div");
      el.innerHTML = html;
      const text = el.textContent ?? el.innerText ?? "";
      if (text.trim()) return text;
    } catch {
      // ignore DOM parse errors
    }
  }

  return "";
}

/**
 * Prefer sync paste-event text; optionally fall back to async Clipboard API (HTTPS).
 */
export async function readPasteText(event?: ClipboardEvent | null): Promise<string> {
  if (event) {
    const fromEvent = extractTextFromClipboardEvent(event);
    if (fromEvent.trim()) return fromEvent;
  }

  try {
    return await readTextFromClipboard();
  } catch {
    return "";
  }
}
