import type { BrandProfile, Project } from "@/types/workflow";
import type { WebsiteIntelligence } from "@/lib/context/website-intelligence";
import type { BrandVisualStyle } from "@/lib/generation/brand-visual-style";
import type { StoryContextSections } from "@/lib/generation/social-image";

/**
 * Compact realtime summary used for image + video prompts.
 * Derived only from company URL scrape, brand profile, and story brief — no static categories.
 */
export interface CreativeMediaSummary {
  companyName: string;
  website: string;
  industry: string;
  primaryService: string;
  services: string[];
  contactPhone: string;
  contactEmail: string;
  problem: string;
  impact: string;
  brandResponse: string;
  visualConcept: string;
  colors: { primary: string; accent: string };
  imagePromptBrief: string;
  videoPromptBrief: string;
}

function truncate(text: string, max: number): string {
  const trimmed = text.trim();
  if (trimmed.length <= max) return trimmed;
  return `${trimmed.slice(0, max - 1).trim()}…`;
}

export function buildCreativeMediaSummary(input: {
  project: Project;
  brand: BrandProfile;
  website?: WebsiteIntelligence | null;
  storySections?: StoryContextSections | null;
  brandStyle?: BrandVisualStyle | null;
  captionExcerpt?: string;
}): CreativeMediaSummary {
  const companyName =
    input.brand.companyName?.trim() ||
    input.website?.companyName?.trim() ||
    input.project.name;
  const website =
    input.project.website?.replace(/^https?:\/\//i, "").replace(/\/$/, "") ||
    input.brandStyle?.website ||
    input.website?.url?.replace(/^https?:\/\//i, "").replace(/\/$/, "") ||
    "";
  const industry =
    input.brand.industry?.trim() ||
    input.project.industry?.trim() ||
    input.website?.primaryService?.trim() ||
    "";
  const primaryService =
    input.brandStyle?.primaryService ||
    input.website?.primaryService?.trim() ||
    input.website?.services?.[0]?.label?.trim() ||
    companyName;
  const services =
    input.brandStyle?.features.map((f) => f.label).filter(Boolean) ||
    input.website?.services?.map((s) => s.label).filter(Boolean) ||
    [];
  const contactPhone =
    input.brand.contactPhone?.trim() ||
    input.brandStyle?.contactPhone ||
    input.website?.contactPhone ||
    "";
  const contactEmail =
    input.brand.contactEmail?.trim() ||
    input.brandStyle?.contactEmail ||
    input.website?.contactEmail ||
    "";
  const problem = input.storySections?.problem?.trim() || "";
  const impact = input.storySections?.impact?.trim() || "";
  const brandResponse = input.storySections?.brandResponse?.trim() || "";

  const visualConcept =
    input.brandStyle?.productVisualHint?.trim() ||
    input.website?.productVisualHint?.trim() ||
    [primaryService, ...services.slice(0, 2)].filter(Boolean).join(", ") ||
    `${companyName} professional service environment`;

  const colors = {
    primary: input.brandStyle?.primaryColor || input.website?.themeColor || "#1e3a5f",
    accent: input.brandStyle?.accentColor || input.website?.accentColor || "#e87121",
  };

  const imagePromptBrief = [
    `Brand: ${companyName}${website ? ` (${website})` : ""}.`,
    industry ? `Industry/focus: ${industry}.` : "",
    `Primary offer: ${primaryService}.`,
    services.length ? `Service highlights: ${services.slice(0, 6).join("; ")}.` : "",
    problem ? `Story problem: ${truncate(problem, 220)}.` : "",
    impact ? `Story impact: ${truncate(impact, 220)}.` : "",
    brandResponse ? `Brand response: ${truncate(brandResponse, 180)}.` : "",
    `Visual concept from company data: ${truncate(visualConcept, 280)}.`,
    `Brand colors: primary ${colors.primary}, accent ${colors.accent}.`,
    `Generate STYLE LOCK v2026-H2 minimalist editorial creative: candid human office photo + clean typography (headline, short subhead, logo, LEARN MORE). Ban legacy SVG flyer look, icon walls, silhouettes with truncated speech bubbles, and hardware product heroes.`,
  ]
    .filter(Boolean)
    .join(" ");

  const videoPromptBrief = [
    `Company: ${companyName}. Website: ${website || "not set"}.`,
    `Offer: ${primaryService}.`,
    services.length ? `Services to show: ${services.slice(0, 5).join(", ")}.` : "",
    problem ? `Opening tension: ${truncate(problem, 180)}.` : "",
    impact ? `Turning point: ${truncate(impact, 180)}.` : "",
    brandResponse ? `Resolution / CTA narrative: ${truncate(brandResponse, 160)}.` : "",
    contactPhone || contactEmail || website
      ? `End card contact: ${[website, contactPhone, contactEmail].filter(Boolean).join(" · ")}.`
      : "",
    input.captionExcerpt ? `Caption mood: ${truncate(input.captionExcerpt, 160)}.` : "",
    "Keep character, environment, wardrobe, and color palette consistent across scenes. Professional commercial quality.",
  ]
    .filter(Boolean)
    .join(" ");

  return {
    companyName,
    website,
    industry,
    primaryService,
    services,
    contactPhone,
    contactEmail,
    problem,
    impact,
    brandResponse,
    visualConcept,
    colors,
    imagePromptBrief,
    videoPromptBrief,
  };
}
