/* AI bridge — sends only user-provided brief data to AI.
   Do NOT embed the canonical generation prompt here. Keep it server-side / operator-side. */

const DEFAULT_AI_ENDPOINT = "";

function buildBannerBriefPayload(form, lang) {
  return {
    kind: "sns_ad_banner_brief",
    version: 1,
    lang,
    submittedAt: new Date().toISOString(),
    brief: {
      platforms: form.platforms || [],
      ratio: form.ratio || "",
      productOrServiceName: form.name || "",
      productOrServiceDescription: form.desc || "",
      productImage: {
        provided: Boolean(form.imageData),
        fileName: form.imageName || "",
        dataUrl: form.imageData || null,
      },
      target: form.target || "",
    },
  };
}

async function submitBannerBriefToAI(form, lang) {
  const payload = buildBannerBriefPayload(form, lang);

  if (!window.__BANNR_ENABLE_AI_SUBMIT__) {
    return {
      ok: true,
      transport: "local-only",
      tokenUsage: 0,
      payload,
      message: "AI送信は無効です。入力内容をローカルで送信準備状態にしました。",
    };
  }

  if (typeof window.BANNR_AI_HANDLER === "function") {
    return window.assertNoPromptLeak(await window.BANNR_AI_HANDLER(payload));
  }

  const endpoint = window.__BANNR_AI_ENDPOINT__ || DEFAULT_AI_ENDPOINT;
  if (!endpoint) {
    throw new Error("AI endpoint is not configured.");
  }
  if (!window.BANNR_SECURITY.allowExternalAiEndpoint && !window.isSameOriginEndpoint(endpoint)) {
    throw new Error("External AI endpoint is blocked by default.");
  }

  const res = await fetch(endpoint, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify(payload),
  });
  if (!res.ok) throw new Error(`AI endpoint failed: ${res.status}`);
  const contentType = res.headers.get("content-type") || "";
  const data = contentType.includes("application/json") ? await res.json() : { ok: true, text: await res.text() };
  return window.assertNoPromptLeak(data);
}

Object.assign(window, { buildBannerBriefPayload, submitBannerBriefToAI });
