const INQUIRY_STORAGE_KEY = "ccp-rental-inquiries";

function readLocalInquiries() {
  try {
    const saved = JSON.parse(localStorage.getItem(INQUIRY_STORAGE_KEY) || "[]");
    return Array.isArray(saved) ? saved : [];
  } catch (err) {
    return [];
  }
}

function writeLocalInquiry(inquiry) {
  const next = [inquiry, ...readLocalInquiries()].slice(0, 100);
  localStorage.setItem(INQUIRY_STORAGE_KEY, JSON.stringify(next));
}

function normalizeEmail(value) {
  return String(value || "").trim().toLowerCase();
}

function isValidInquiryEmail(value) {
  return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(normalizeEmail(value));
}

async function submitRentalInquiry(payload) {
  if (!isValidInquiryEmail(payload.email)) {
    throw new Error("A valid email address is required.");
  }

  const inquiry = {
    id: `inq-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
    createdAt: new Date().toISOString(),
    page: window.location.pathname.split("/").pop() || "index.html",
    ...payload,
    email: normalizeEmail(payload.email),
  };

  try {
    const response = await fetch("/api/inquiries", {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify(inquiry),
    });
    if (!response.ok) {
      const error = new Error("Inquiry save failed");
      error.skipLocalFallback = response.status < 500;
      throw error;
    }
    return await response.json();
  } catch (err) {
    if (err.skipLocalFallback) throw err;
    writeLocalInquiry(inquiry);
    return { inquiry, stored: "local" };
  }
}

async function loadRentalInquiries() {
  try {
    // /api/inquiries GET is admin-only — use adminFetch when available.
    const fetcher = (typeof window !== "undefined" && window.adminFetch) ? window.adminFetch : fetch;
    const response = await fetcher("/api/inquiries");
    if (!response.ok) throw new Error("Inquiry load failed");
    const serverInquiries = await response.json();
    return Array.isArray(serverInquiries)
      ? [...serverInquiries, ...readLocalInquiries()]
      : readLocalInquiries();
  } catch (err) {
    return readLocalInquiries();
  }
}

window.submitRentalInquiry = submitRentalInquiry;
window.loadRentalInquiries = loadRentalInquiries;
