const AINA_PREVIEW_AUTH_KEY = "ainaPreviewAuthToken";
const AINA_PREVIEW_VIEW_KEY = "ainaPreviewViewedProfileId";

function readPreviewStorage(key, fallback = "") {
  try {
    const value = window.localStorage.getItem(key);
    return value || fallback;
  } catch (_error) {
    return fallback;
  }
}

function writePreviewStorage(key, value) {
  try {
    if (!value) {
      window.localStorage.removeItem(key);
      return;
    }

    window.localStorage.setItem(key, value);
  } catch (_error) {
    // Ignore storage errors in preview mode.
  }
}

async function previewApi(path, options = {}) {
  const headers = {
    ...(options.headers || {})
  };

  if (options.body !== undefined && !headers["Content-Type"]) {
    headers["Content-Type"] = "application/json";
  }

  if (options.token) {
    headers.Authorization = `Bearer ${options.token}`;
  }

  const response = await fetch(path, {
    method: options.method || "GET",
    headers,
    body: options.body !== undefined ? JSON.stringify(options.body) : undefined
  });

  if (response.status === 204) {
    return null;
  }

  const contentType = response.headers.get("content-type") || "";
  const payload = contentType.includes("application/json")
    ? await response.json()
    : await response.text();

  if (!response.ok) {
    throw new Error(payload?.error || `Request failed with status ${response.status}.`);
  }

  return payload;
}

function getWhoForName(name) {
  return String(name || "").toLowerCase().includes("aina") ? "aina" : "victor";
}

function getPartnerProfile(snapshot, viewerProfileId) {
  return (snapshot?.profiles || []).find((profile) => profile.id !== viewerProfileId) || null;
}

function formatPreviewTime(input) {
  if (!input) {
    return "";
  }

  return new Intl.DateTimeFormat("es-ES", {
    hour: "2-digit",
    minute: "2-digit"
  }).format(new Date(input));
}

function formatPreviewDate(input) {
  if (!input) {
    return "";
  }

  return new Intl.DateTimeFormat("es-ES", {
    day: "numeric",
    month: "short"
  }).format(new Date(input));
}

const AinaAppContext = React.createContext(null);

function useAinaApp() {
  return React.useContext(AinaAppContext);
}

window.AINA_PREVIEW_AUTH_KEY = AINA_PREVIEW_AUTH_KEY;
window.AINA_PREVIEW_VIEW_KEY = AINA_PREVIEW_VIEW_KEY;
window.AinaAppContext = AinaAppContext;
window.useAinaApp = useAinaApp;
window.readPreviewStorage = readPreviewStorage;
window.writePreviewStorage = writePreviewStorage;
window.previewApi = previewApi;
window.getWhoForName = getWhoForName;
window.getPartnerProfile = getPartnerProfile;
window.formatPreviewTime = formatPreviewTime;
window.formatPreviewDate = formatPreviewDate;
