import type { PriceSearchResponse } from "@/src/types/priceSearch";

const DEFAULT_DISCLAIMER =
  "Prezzi indicativi da fonti web: verificare su ordine fornitore prima dell'acquisto.";

export function isPriceSearchResponse(value: unknown): value is PriceSearchResponse {
  if (!value || typeof value !== "object") return false;
  const v = value as Record<string, unknown>;
  return (
    typeof v.query === "string" &&
    typeof v.searchedAt === "string" &&
    Array.isArray(v.offers) &&
    typeof v.disclaimer === "string"
  );
}

export function emptyPriceSearchResponse(query: string, disclaimer?: string): PriceSearchResponse {
  return {
    query,
    searchedAt: new Date().toISOString(),
    offers: [],
    disclaimer: disclaimer ?? DEFAULT_DISCLAIMER,
    source: "tavily",
  };
}

export function parseN8nResponseBody(text: string, status: number): unknown {
  const trimmed = text.trim();

  if (!trimmed) {
    if (status === 200) {
      throw new Error(
        "Workflow n8n senza risposta. Verifica che il workflow sia attivo e che l'URL sia quello di produzione.",
      );
    }
    throw new Error(`Errore n8n (HTTP ${status})`);
  }

  try {
    return JSON.parse(trimmed);
  } catch {
    throw new Error(
      `Risposta non valida dal workflow n8n (HTTP ${status}). Controlla l'esecuzione su n8n.`,
    );
  }
}

export { DEFAULT_DISCLAIMER };
