import type { Lead } from "@/types";

export type ScalingTip = {
  title: string;
  body: string;
  action: string;
  urgency: "info" | "warning" | "success";
};

export function getScalingTip(leads: Lead[]): ScalingTip {
  if (leads.length === 0) {
    return {
      title: "Starte deinen Lead-Funnel",
      body: "Füge deine ersten Leads hinzu oder importiere eine bestehende Liste. Je früher du anfängst zu tracken, desto schneller erkennst du Muster.",
      action: "Ersten Lead hinzufügen",
      urgency: "info",
    };
  }

  const won    = leads.filter((l) => l.status === "gewonnen");
  const lost   = leads.filter((l) => l.status === "verloren");
  const neu    = leads.filter((l) => l.status === "neu");
  const offer  = leads.filter((l) => l.status === "angebot");
  const hot    = leads.filter((l) => l.score === "hot");
  const cold   = leads.filter((l) => l.score === "cold");

  const closed = won.length + lost.length;
  const convRate = closed > 0 ? won.length / closed : null;

  // Win rate by category
  const catWins: Record<string, number> = {};
  const catTotal: Record<string, number> = {};
  for (const l of leads) {
    catTotal[l.category] = (catTotal[l.category] ?? 0) + 1;
    if (l.status === "gewonnen") catWins[l.category] = (catWins[l.category] ?? 0) + 1;
  }
  const bestCat = Object.entries(catWins).sort((a, b) => b[1] - a[1])[0];

  // Stale leads — still "neu" but created >7 days ago
  const oneWeekAgo = Date.now() - 7 * 24 * 60 * 60 * 1000;
  const staleNeu = neu.filter((l) => new Date(l.created_at).getTime() < oneWeekAgo);

  // High pipeline value but low conversion
  const pipelineValue = leads
    .filter((l) => l.status !== "gewonnen" && l.status !== "verloren")
    .reduce((acc, l) => acc + (l.value ?? 0), 0);

  // Many offers pending
  const oldOffers = offer.filter((l) => new Date(l.updated_at).getTime() < oneWeekAgo);

  // ── Priority tips ────────────────────────────────────────────

  if (hot.length > 0 && hot.some((l) => l.status === "neu" || l.status === "kontaktiert")) {
    return {
      title: `${hot.filter((l) => l.status !== "gewonnen" && l.status !== "verloren").length} heiße Leads warten`,
      body: "Du hast heiße Leads, die noch kein Angebot erhalten haben. Heiße Kontakte haben die höchste Abschlusswahrscheinlichkeit — handle jetzt, bevor sie kalt werden.",
      action: "Heiße Leads priorisieren",
      urgency: "warning",
    };
  }

  if (oldOffers.length >= 2) {
    return {
      title: "Offene Angebote nachfassen",
      body: `${oldOffers.length} Angebote sind seit über einer Woche offen. Ein kurzes Follow-up erhöht die Abschlussrate um bis zu 40 %. Ruf an statt einer E-Mail.`,
      action: "Angebote überprüfen",
      urgency: "warning",
    };
  }

  if (staleNeu.length >= 3) {
    return {
      title: `${staleNeu.length} neue Leads noch nicht kontaktiert`,
      body: "Leads die innerhalb von 5 Minuten nach Eingang kontaktiert werden, konvertieren 9× häufiger. Qualifiziere diese Leads oder archiviere sie.",
      action: "Leads kontaktieren",
      urgency: "warning",
    };
  }

  if (convRate !== null && convRate < 0.15 && closed >= 5) {
    return {
      title: `Conversion Rate bei ${Math.round(convRate * 100)} %`,
      body: "Unter 15 % Conversion ist ein Zeichen für zu breite Zielgruppe oder fehlendes Nachfassen. Fokussiere dich auf qualifizierte Leads — weniger ist mehr.",
      action: "Qualifizierung optimieren",
      urgency: "warning",
    };
  }

  if (cold.length > leads.length * 0.6 && leads.length >= 5) {
    return {
      title: "Zu viele kalte Leads in der Pipeline",
      body: `${cold.length} von ${leads.length} Leads sind kalt. Setze eine Frist: Leads die nach 2 Follow-ups nicht reagieren, konsequent als verloren markieren und Energie in warme/heiße investieren.`,
      action: "Pipeline bereinigen",
      urgency: "info",
    };
  }

  if (bestCat && convRate !== null && convRate >= 0.3) {
    return {
      title: `Stark in "${bestCat[0]}"`,
      body: `Du hast die meisten Abschlüsse in ${bestCat[0]}. Verdopple dort deine Akquise-Aktivitäten — gleiche Energie, doppelter Output, weil du die Sprache dieser Zielgruppe bereits kennst.`,
      action: "Akquise in dieser Kategorie ausbauen",
      urgency: "success",
    };
  }

  if (pipelineValue > 10000) {
    return {
      title: `${new Intl.NumberFormat("de-DE", { style: "currency", currency: "EUR", maximumFractionDigits: 0 }).format(pipelineValue)} in der Pipeline`,
      body: "Du hast signifikantes Potenzial in offenen Leads. Priorisiere die wertvollsten Deals und stelle sicher, dass jeder Lead einen klaren nächsten Schritt hat.",
      action: "Pipeline nach Wert sortieren",
      urgency: "success",
    };
  }

  if (won.length >= 5 && convRate !== null && convRate >= 0.4) {
    return {
      title: "Gute Conversion — jetzt skalieren",
      body: `${Math.round(convRate * 100)} % Conversion ist stark. Der nächste Schritt: Volumen erhöhen. Neue Quellen wie Empfehlungsprogramme oder Paid Ads können deinen Funnel füllen.`,
      action: "Neue Quelle erschließen",
      urgency: "success",
    };
  }

  return {
    title: "Tracke konsequent weiter",
    body: "Regelmäßiges Tracking ist der Schlüssel. Je mehr Daten du sammelst, desto klarer wird, welche Kategorien, Quellen und Ansprachen am besten funktionieren.",
    action: "Lead aktualisieren",
    urgency: "info",
  };
}
