import { generateText } from "@/lib/ai";
import {
  buildStoryImageBriefSystemPrompt,
  buildStoryImageBriefUserPrompt,
} from "./story-post-prompt";

export interface ImageBrief {
  headline: string;
  subheadline: string;
  visualConcept: string;
  keyStat: string | null;
}

function parseBriefJson(raw: string): ImageBrief | null {
  const trimmed = raw.trim();
  const jsonMatch = trimmed.match(/\{[\s\S]*\}/);
  if (!jsonMatch) return null;

  try {
    const data = JSON.parse(jsonMatch[0]) as Partial<ImageBrief>;
    if (!data.headline?.trim() || !data.subheadline?.trim()) return null;
    return {
      headline: data.headline.trim().slice(0, 80),
      subheadline: data.subheadline.trim().slice(0, 200),
      visualConcept: data.visualConcept?.trim().slice(0, 300) || data.subheadline.trim(),
      keyStat: data.keyStat?.trim().slice(0, 40) || null,
    };
  } catch {
    return null;
  }
}

/** Story-aligned image brief — Problem/Impact first, caption second. */
export async function generateImageBrief(input: {
  caption: string;
  companyName: string;
  industry: string;
  category: string;
  sequenceTitle: string;
  problem?: string;
  impact?: string;
  tagline?: string;
  keyTheme?: string;
  brandResponse?: string;
  engagementQuestion?: string;
  contentCategory?: string;
  seoKeywords?: string;
  websiteSummary?: string;
  tracker?: import("@/lib/ai/usage-logger").PostAiUsageTracker;
}): Promise<ImageBrief | null> {
  if (!input.problem?.trim() && !input.impact?.trim()) {
    return null;
  }

  try {
    const result = await generateText(
      {
        systemPrompt: buildStoryImageBriefSystemPrompt({
          companyName: input.companyName,
          industry: input.industry,
        }),
        userPrompt: buildStoryImageBriefUserPrompt({
          companyName: input.companyName,
          industry: input.industry,
          sequenceTitle: input.sequenceTitle,
          problem: input.problem ?? "",
          impact: input.impact ?? "",
          tagline: input.tagline,
          caption: input.caption,
          keyTheme: input.keyTheme,
          brandResponse: input.brandResponse,
          engagementQuestion: input.engagementQuestion,
          contentCategory: input.contentCategory,
          seoKeywords: input.seoKeywords,
          websiteSummary: input.websiteSummary,
        }),
      },
      { operation: "image_brief", tracker: input.tracker },
    );

    return parseBriefJson(result.content);
  } catch {
    return null;
  }
}
