// frontend/lib/api.ts (o donde lo tengas)
import type { Article, ArticleMeta, Section } from "./types";
import type { Locale } from "@/lib/i18n";
import { isLocale } from "@/lib/i18n";

const API = process.env.NEXT_PUBLIC_API_ORIGIN ?? "http://127.0.0.1:8000";

async function apiGet<T>(path: string): Promise<T> {
  const url = `${API}${path}`;

  const res = await fetch(url, {
    next: { revalidate: 30 }, // SSR con cache controlado
  });

  if (!res.ok) {
    console.error("apiGet ERROR", {
      url,
      status: res.status,
      statusText: res.statusText,
    });
    throw new Error(`API error ${res.status}`);
  }

  return (await res.json()) as T;
}

export function getSections(): Promise<Section[]> {
  return apiGet("/api/articles/sections");
}

export function listArticles(params: {
  section?: string;
  q?: string;
  limit?: number;
  offset?: number;
  locale?: Locale; // mejor tipado
}): Promise<ArticleMeta[]> {
  const q = new URLSearchParams();

  if (params.section) q.set("section", params.section);
  if (params.q) q.set("q", params.q);

  // Solo mandamos locale si es válido según tu i18n
  if (params.locale && isLocale(params.locale)) {
    q.set("locale", params.locale);
  }

  q.set("limit", String(params.limit ?? 20));
  q.set("offset", String(params.offset ?? 0));

  return apiGet(`/api/articles?${q.toString()}`);
}

export function getArticle(slug: string): Promise<Article> {
  return apiGet(`/api/articles/${encodeURIComponent(slug)}`);
}

export async function incrementView(slug: string): Promise<void> {
  const url = `${API}/api/articles/${encodeURIComponent(slug)}/view`;
  const res = await fetch(url, { method: "POST" });

  if (!res.ok) {
    console.error("incrementView ERROR", {
      url,
      status: res.status,
      statusText: res.statusText,
    });
    // No tiramos error porque no queremos romper la página por un contador de vistas
  }
}
