// Resolves a story's raw video URL (YouTube / Vimeo / Facebook / direct file
// link, as pasted into Webflow's "videoUrl" field) into something the story
// detail page's video hero can actually play.
//
// See src/pages/expat/stories/[slug].tsx for the consumer.

export type ResolvedVideo =
  | { kind: "iframe"; src: string }
  | { kind: "file"; src: string };

const DIRECT_FILE_EXTENSIONS = [".mp4", ".webm", ".ogg", ".ogv", ".mov"];

export function resolveVideoEmbed(rawUrl: string): ResolvedVideo | null {
  const url = rawUrl.trim();
  if (!url) return null;

  let parsed: URL;
  try {
    parsed = new URL(url);
  } catch {
    return null;
  }

  const host = parsed.hostname.replace(/^www\./, "").toLowerCase();
  const pathLower = parsed.pathname.toLowerCase();

  // Direct video file link.
  if (DIRECT_FILE_EXTENSIONS.some((ext) => pathLower.endsWith(ext))) {
    return { kind: "file", src: url };
  }

  // YouTube: youtu.be/ID, youtube.com/watch?v=ID, /embed/ID, /shorts/ID
  if (host === "youtu.be") {
    const id = parsed.pathname.split("/").filter(Boolean)[0];
    if (id) return { kind: "iframe", src: `https://www.youtube.com/embed/${id}?autoplay=1&rel=0` };
  }
  if (host === "youtube.com" || host === "m.youtube.com") {
    if (parsed.pathname === "/watch") {
      const id = parsed.searchParams.get("v");
      if (id) return { kind: "iframe", src: `https://www.youtube.com/embed/${id}?autoplay=1&rel=0` };
    }
    const embedMatch = parsed.pathname.match(/^\/(embed|shorts)\/([^/]+)/);
    if (embedMatch) {
      return {
        kind: "iframe",
        src: `https://www.youtube.com/embed/${embedMatch[2]}?autoplay=1&rel=0`,
      };
    }
  }

  // Vimeo: vimeo.com/12345, player.vimeo.com/video/12345
  if (host === "vimeo.com") {
    const id = parsed.pathname.split("/").filter(Boolean).pop();
    if (id) return { kind: "iframe", src: `https://player.vimeo.com/video/${id}?autoplay=1` };
  }
  if (host === "player.vimeo.com") {
    return { kind: "iframe", src: `${url}${url.includes("?") ? "&" : "?"}autoplay=1` };
  }

  // Facebook video links (watch/video-permalink URLs) via FB's video plugin.
  if (host === "facebook.com" || host === "fb.watch") {
    return {
      kind: "iframe",
      src: `https://www.facebook.com/plugins/video.php?href=${encodeURIComponent(
        url
      )}&show_text=0&autoplay=1`,
    };
  }

  // Unknown host: best-effort iframe embed of the URL as-is.
  return { kind: "iframe", src: url };
}
