import type { StoryArcBeat } from "../story-types";
import type { StoryIntelligence } from "./types";
import { getLetterToGodBeat } from "./letter-to-god-arc";

/** Map a personalized story beat to rich narrative intelligence. */
export function buildStoryIntelligence(
  beat: StoryArcBeat,
  beatIndex: number,
  totalBeats: number,
): StoryIntelligence {
  const letterToGodBeat = getLetterToGodBeat(beatIndex);
  const problemLead = beat.problem.split(".")[0] ?? beat.problem;
  const impactLead = beat.impact[0]?.split(".")[0] ?? beat.impact[0] ?? "";

  return {
    beatIndex,
    totalBeats,
    act: beat.act,
    title: beat.title,
    campaignStory: beat.campaignStory,
    currentSituation: beat.background,
    conflict: problemLead,
    obstacle: beat.causeEventEffect.join(" "),
    turningPoint: beat.brandResponse,
    solution: beat.brandResponse,
    transformation: impactLead,
    lesson: letterToGodBeat.lesson,
    emotions: [...letterToGodBeat.emotion, beat.keyTheme.split("·")[0]?.trim() ?? ""].filter(
      Boolean,
    ),
    letterToGodBeat,
    engagementQuestion: beat.engagementQuestion,
    keyTheme: beat.keyTheme,
    narrativeBridge: {
      from: beat.bridgeFromPrevious,
      to: beat.bridgeToNext,
    },
  };
}

export function formatStoryIntelligenceMarkdown(story: StoryIntelligence): string {
  const narrative = story.letterToGodBeat;
  return [
    "## Story Intelligence (narrative structure — content from brand/website)",
    `Post ${story.beatIndex + 1} of ${story.totalBeats} — ${story.title}`,
    `Narrative phase: ${narrative.title}`,
    `Structure guidance: ${narrative.situation}`,
    `Act: ${story.act}`,
    `Campaign story: ${story.campaignStory}`,
    `Conflict (from brief): ${story.conflict}`,
    `Turning point: ${story.turningPoint}`,
    `Transformation: ${story.transformation}`,
    `Lesson (tone): ${story.lesson}`,
    `Emotions: ${story.emotions.join(", ")}`,
    `Key theme: ${story.keyTheme}`,
    `Engagement question: ${story.engagementQuestion}`,
    story.narrativeBridge.from ? `Continues from: ${story.narrativeBridge.from}` : "",
    story.narrativeBridge.to ? `Leads into: ${story.narrativeBridge.to}` : "",
  ]
    .filter(Boolean)
    .join("\n");
}
