import type { BrandProfile, PostSequenceItem, Project } from "@/types/workflow";
import { getSequenceContent } from "./format-sequence-context";
import { parseStoryContextSections } from "./story-context-builder";
import {
  buildStoryCaptionSystemPrompt,
  buildStoryCaptionUserPrompt,
  buildStoryImageBriefSystemPrompt,
  buildStoryImageBriefUserPrompt,
  parseCompactStoryBrief,
} from "@/lib/generation/story-post-prompt";
import {
  buildContextVideoPrompt,
  buildContextVideoStoryboard,
} from "@/lib/generation/slideshow-video";
import {
  buildContextualImagePrompt,
  buildSocialImageContext,
} from "@/lib/generation/social-image";

export { buildFullProjectContext, buildGenerationUserPrompt } from "./build-full-project-context";

export function buildProjectContextPayload(input: {
  projectId: string;
  sequenceItem: PostSequenceItem;
  fullContext?: string;
}): string {
  return input.fullContext ?? getSequenceContent(input.sequenceItem);
}

export function buildTextSystemPrompt(input?: {
  companyName?: string;
  industry?: string;
  brandVoice?: string;
  tagline?: string;
  platforms?: string[];
  targetMarkets?: string;
}): string {
  return buildStoryCaptionSystemPrompt({
    companyName: input?.companyName ?? "the company",
    industry: input?.industry ?? "B2B",
    brandVoice: input?.brandVoice ?? "Professional",
    tagline: input?.tagline,
    platforms: input?.platforms,
    targetMarkets: input?.targetMarkets,
  });
}

export function buildTextUserPrompt(
  contextBlock: string,
  input?: {
    companyName?: string;
    industry?: string;
    projectName?: string;
    tagline?: string;
    sequenceTitle?: string;
    fullContext?: string;
    productConfigBlock?: string;
    publishedAvoidanceBlock?: string;
    contentCategoryGuide?: string;
    targetMarkets?: string;
  },
): string {
  const brief = parseCompactStoryBrief(contextBlock);
  const storyPrompt = buildStoryCaptionUserPrompt(brief, {
    companyName: input?.companyName || input?.projectName || "this brand",
    industry: input?.industry ?? "B2B",
    sequenceTitle: input?.sequenceTitle,
    tagline: input?.tagline,
    publishedAvoidanceBlock: input?.publishedAvoidanceBlock,
    contentCategoryGuide: input?.contentCategoryGuide,
    targetMarkets: input?.targetMarkets,
  });

  const parts = [storyPrompt];
  if (input?.productConfigBlock) {
    parts.push(
      "",
      "## ACTIVE PRODUCT (white-label — headline & story MUST match this solution, not a hardcoded e-fax line)",
      input.productConfigBlock,
    );
  }
  if (input?.fullContext) {
    parts.push(
      "",
      "## Master Context (website + brand facts — enhance with narrative tone; stay grounded in company services)",
      input.fullContext,
    );
  }

  return parts.join("\n");
}

export function buildImagePrompt(input: {
  project: Project;
  brand: BrandProfile;
  sequenceItem: PostSequenceItem;
  caption: string;
  brief?: import("@/lib/generation/image-brief").ImageBrief | null;
}): string {
  const sections = parseStoryContextSections(getSequenceContent(input.sequenceItem));
  const ctx = buildSocialImageContext({
    ...input,
    brief: input.brief,
    storySections: sections,
  });
  return buildContextualImagePrompt(ctx, input.sequenceItem, sections);
}

export function buildVideoPrompt(input: {
  project: Project;
  brand: BrandProfile;
  sequenceItem: PostSequenceItem;
  caption: string;
  storySections?: import("@/lib/generation/social-image").StoryContextSections;
}): string {
  return buildContextVideoPrompt(input);
}

export function buildVideoStoryboard(
  videoPrompt: string,
  input?: {
    brand: BrandProfile;
    sequenceItem: PostSequenceItem;
    storySections?: import("@/lib/generation/social-image").StoryContextSections;
  },
): string {
  if (input) {
    return buildContextVideoStoryboard({ ...input, videoPrompt });
  }
  return buildContextVideoStoryboard({
    brand: { companyName: "", tagline: "", industry: "", brandVoice: "", logoDataUrl: null, logoFileName: null, contactPhone: "", contactEmail: "" },
    sequenceItem: { id: "", title: "", summary: "", tag: "", content: "" },
    videoPrompt,
  });
}

export {
  buildStoryCaptionSystemPrompt,
  buildStoryCaptionUserPrompt,
  buildStoryImageBriefSystemPrompt,
  buildStoryImageBriefUserPrompt,
  parseCompactStoryBrief,
} from "@/lib/generation/story-post-prompt";
