/* =====================================================================
   lib/ticketanizer.js — Bewerbungen als Ticket bei Ticketanizer eröffnen.
   1:1 portiert aus cloudflare-worker/src/lib/ticketanizer.js.
   ===================================================================== */

const TICKETANIZER_BASIS_URL = "https://api.ticketanizer.com";

const PANEL_IDS = { modi: 4, kooperation: 5, scout: 6, creator: 7 };

const FIELD_LABELS = {
  name: "Name", email: "E-Mail", kontakt: "Kontakt (Discord/TikTok)", erfahrung: "Erfahrung",
  verfuegbarkeit: "Verfügbarkeit", warum: "Warum möchtest du dabei sein?", platform: "Plattform",
  content: "Content-Art", firma: "Firma / Projekt", idee: "Idee / Anliegen",
};

function ersteNachrichtAufbauen(type, data) {
  const zeilen = Object.entries(data || {})
    .filter(([, v]) => String(v ?? "").trim() !== "")
    .map(([key, value]) => `**${FIELD_LABELS[key] || key}:** ${String(value).trim()}`);
  if (!zeilen.length) zeilen.push("_Keine weiteren Angaben übermittelt._");
  const text = zeilen.join("\n");
  return text.length > 3500 ? text.slice(0, 3500) + "…" : text;
}

const warten = (ms) => new Promise((fertig) => setTimeout(fertig, ms));
const MAX_VERSUCHE = 3;
const STANDARD_WARTEZEITEN_MS = [2000, 5000];

async function ticketAnfrageSenden(apiKey, panelId, visitorName, firstMessage) {
  for (let versuch = 1; versuch <= MAX_VERSUCHE; versuch++) {
    const antwort = await fetch(`${TICKETANIZER_BASIS_URL}/v1/tickets`, {
      method: "POST",
      headers: { "X-API-Key": apiKey, "Content-Type": "application/json" },
      body: JSON.stringify({ panel_id: panelId, visitor_name: visitorName, first_message: firstMessage }),
    });
    if (antwort.status !== 429 || versuch === MAX_VERSUCHE) return antwort;
    const retryAfterHeader = Number(antwort.headers.get("Retry-After"));
    const wartezeit = Number.isFinite(retryAfterHeader) && retryAfterHeader > 0 ? retryAfterHeader * 1000 : STANDARD_WARTEZEITEN_MS[versuch - 1] || 5000;
    await warten(wartezeit);
  }
}

export async function bewerbungAlsTicketAnlegen(type, data) {
  const apiKey = process.env.TICKETANIZER_API_KEY;
  const panelId = PANEL_IDS[type];
  if (!apiKey || !panelId) return;

  const visitorName = String(data?.name || data?.firma || "Unbekannt").trim().slice(0, 80) || "Unbekannt";
  const firstMessage = ersteNachrichtAufbauen(type, data);

  try {
    const antwort = await ticketAnfrageSenden(apiKey, panelId, visitorName, firstMessage);
    if (!antwort.ok) {
      const antwortText = await antwort.text().catch(() => "");
      console.error(`[ticketanizer] Fehler beim Ticket-Anlegen (${type}): HTTP ${antwort.status} — ${antwortText}`);
    }
  } catch (fehler) {
    console.error(`[ticketanizer] Ausnahme beim Ticket-Anlegen (${type}):`, fehler && fehler.message);
  }
}
