import { defineEventHandler, getCookie, getRequestURL, setResponseHeader, setResponseStatus } from "h3";

/**
 * Redirect dokumen HTML sebelum SSR Nuxt — cookie `workpulse-auth` belum `1` → `/login`.
 * (Middleware rute `navigateTo` di server terlambat; `sendRedirect` h3 mengembalikan Promise ter-defer
 * sehingga tanpa `res.end` sinkron, handler berikutnya tetap jalan.)
 */
export default defineEventHandler((event) => {
  const m = event.node.req.method || "GET";
  if (m !== "GET" && m !== "HEAD") return;

  const url = getRequestURL(event);
  const path = url.pathname || "/";

  /** Sudah login → jangan SSR halaman login (hindari flash / mismatch dengan klien). */
  if (path === "/login" || path === "/login/") {
    if (getCookie(event, "workpulse-auth") === "1") {
      const loc = "/" + (url.search || "");
      setResponseStatus(event, 302);
      setResponseHeader(event, "location", loc);
      const encodedLoc = loc.replace(/"/g, "%22");
      const html = `<!DOCTYPE html><html><head><meta http-equiv="refresh" content="0; url=${encodedLoc}"></head></html>`;
      event.node.res.setHeader("content-type", "text/html; charset=utf-8");
      event.node.res.end(html);
      return;
    }
    return;
  }

  if (
    path.startsWith("/_nuxt/") ||
    path.startsWith("/_nuxt") ||
    path.startsWith("/favicon") ||
    path.startsWith("/workpulse-api/") ||
    path.startsWith("/__nuxt") ||
    path.startsWith("/.well-known/") ||
    path === "/robots.txt" ||
    path === "/sitemap.xml"
  ) {
    return;
  }

  if (getCookie(event, "workpulse-auth") === "1") {
    return;
  }

  const loc = `/login${url.search || ""}`;
  setResponseStatus(event, 302);
  setResponseHeader(event, "location", loc);
  const encodedLoc = loc.replace(/"/g, "%22");
  const html = `<!DOCTYPE html><html><head><meta http-equiv="refresh" content="0; url=${encodedLoc}"></head></html>`;
  event.node.res.setHeader("content-type", "text/html; charset=utf-8");
  event.node.res.end(html);
});
