/* ═══════════════════════════════════════════════════════════
   DrewFans — API client
   Wraps Cloudflare Pages Functions in /api/*.
   Tracks pimpbunny session cookies so proxy requests stay
   aligned with the upstream session.
   ═══════════════════════════════════════════════════════════ */

const API_BASE = '/api';
let activeCookies = '';

async function jsonOrThrow(res) {
  if (!res.ok) {
    let body = '';
    try { body = await res.text(); } catch {}
    throw new Error(`API ${res.status}${body ? ' — ' + body.slice(0, 200) : ''}`);
  }
  return res.json();
}

const api = {
  async home(page = 1, sortBy = '') {
    const params = new URLSearchParams({ page: String(page) });
    if (sortBy) params.set('sort_by', sortBy);
    const data = await jsonOrThrow(await fetch(`${API_BASE}/home?${params}`));
    if (data.cookies) activeCookies = data.cookies;
    return data;
  },

  async search(query, page = 1) {
    const params = new URLSearchParams({ q: query, page: String(page) });
    const data = await jsonOrThrow(await fetch(`${API_BASE}/search?${params}`));
    if (data.cookies) activeCookies = data.cookies;
    return data;
  },

  async video(videoUrl) {
    const data = await jsonOrThrow(await fetch(`${API_BASE}/video?url=${encodeURIComponent(videoUrl)}`));
    if (data.cookies) activeCookies = data.cookies;
    return data;
  },

  async actress(actressUrl, page = 1, sortBy = '') {
    const params = new URLSearchParams({ url: actressUrl, page: String(page) });
    if (sortBy) params.set('sort_by', sortBy);
    const data = await jsonOrThrow(await fetch(`${API_BASE}/actress?${params}`));
    if (data.cookies) activeCookies = data.cookies;
    return data;
  },

  proxyUrl(url) {
    if (!url) return '';
    if (url.startsWith('/api/') || url.startsWith('data:') || url.startsWith('blob:')) return url;
    return `${API_BASE}/proxy?url=${encodeURIComponent(url)}`;
  },

  // Used for video streams (player + card preview). Resolves the
  // pimpbunny URL server-side on every request so the session cookie
  // and the request egress IP stay aligned — no more 410 Gone.
  streamUrl(pageUrl, quality) {
    if (!pageUrl) return '';
    let u = `${API_BASE}/stream?pageUrl=${encodeURIComponent(pageUrl)}`;
    if (quality) u += `&quality=${encodeURIComponent(quality)}`;
    return u;
  },
};

Object.assign(window, { api });
