export const prerender = false;

import type { APIRoute } from 'astro';
import { isAuthenticated, ADMIN_COOKIE } from '@admin/lib/admin-auth';

async function parseJsonResponse(res: Response): Promise<unknown> {
  const text = await res.text();
  try {
    return JSON.parse(text);
  } catch {
    return { raw: text };
  }
}

export const GET: APIRoute = async ({ cookies, locals }) => {
  const runtime = (locals as any).runtime as {
    env: { DB: D1Database; SCRAPER_WORKER_URL?: string; SCRAPER_ADMIN_TOKEN?: string }
  } | undefined;

  const db = runtime?.env?.DB;
  if (!db || !await isAuthenticated(cookies.get(ADMIN_COOKIE)?.value, db)) {
    return new Response(JSON.stringify({ error: 'Unauthorized' }), {
      status: 401,
      headers: { 'Content-Type': 'application/json' },
    });
  }

  const scraperUrl = runtime?.env?.SCRAPER_WORKER_URL;
  const scraperToken = runtime?.env?.SCRAPER_ADMIN_TOKEN;
  if (!scraperUrl || !scraperToken) {
    return new Response(
      JSON.stringify({ error: 'SCRAPER_WORKER_URL or SCRAPER_ADMIN_TOKEN not configured' }),
      { status: 503, headers: { 'Content-Type': 'application/json' } }
    );
  }

  const headers = { Authorization: `Bearer ${scraperToken}` };

  try {
    const [statusRes, statsRes] = await Promise.all([
      fetch(`${scraperUrl}/status`, { headers }),
      fetch(`${scraperUrl}/stats`, { headers }),
    ]);

    const [statusData, statsData] = await Promise.all([
      parseJsonResponse(statusRes),
      parseJsonResponse(statsRes),
    ]);

    if (!statusRes.ok || !statsRes.ok) {
      return new Response(JSON.stringify({
        error: 'Failed to fetch scraper status/stats',
        status: statusData,
        stats: statsData,
      }), { status: 502, headers: { 'Content-Type': 'application/json' } });
    }

    return new Response(JSON.stringify({ status: statusData, stats: statsData }), {
      status: 200,
      headers: { 'Content-Type': 'application/json' },
    });
  } catch (err) {
    return new Response(JSON.stringify({ error: String(err) }), {
      status: 502,
      headers: { 'Content-Type': 'application/json' },
    });
  }
};
