/**
 * Post-aligned visual brief — ties caption + story + KB specs to image generation.
 */

export function buildPostVisualBrief(input: {
  caption: string;
  problem?: string;
  impact?: string;
  brandResponse?: string;
  sequenceTitle?: string;
  contentCategory?: string;
  imageBriefConcept?: string;
  platformKnowledgeBlock?: string;
}): string {
  const captionClean = input.caption.replace(/#\w+/g, "").trim();
  const captionExcerpt = captionClean.slice(0, 600);
  const firstScenario = captionClean
    .split(/(?<=[.!?])\s+/)
    .find((s) => s.length > 35)
    ?.slice(0, 220);

  const parts = [
    "## POST CONTENT ALIGNMENT (mandatory — image MUST match this post)",
    input.sequenceTitle ? `Post beat: ${input.sequenceTitle}` : "",
    input.contentCategory ? `Category: ${input.contentCategory}` : "",
    "",
    "### Caption story (visualize THIS — not generic stock B2B)",
    captionExcerpt,
    firstScenario ? `\nKey scenario to show: ${firstScenario}` : "",
    "",
    input.problem?.trim() ? `Problem to depict: ${input.problem.trim().slice(0, 280)}` : "",
    input.impact?.trim() ? `Impact / tension: ${input.impact.trim().slice(0, 280)}` : "",
    input.brandResponse?.trim()
      ? `Resolution / product role: ${input.brandResponse.trim().slice(0, 220)}`
      : "",
    input.imageBriefConcept?.trim()
      ? `\n### Art director visual concept\n${input.imageBriefConcept.trim().slice(0, 400)}`
      : "",
    "",
    "Rules: Same industry, same customer pain, same product story as the caption.",
    "Do NOT show unrelated industries (e.g. generic automation office if post is about fax/compliance).",
    "Do NOT invent metrics or client logos not in the caption.",
    input.platformKnowledgeBlock?.trim() ?? "",
  ];

  return parts.filter(Boolean).join("\n").trim();
}

export function appendPostVisualBrief(basePrompt: string, postVisualBrief: string | undefined): string {
  if (!postVisualBrief?.trim()) return basePrompt;
  return `${basePrompt}\n\n${postVisualBrief.trim()}`;
}
