import type { BrandVisualStyle } from "@/lib/generation/brand-visual-style";
import type { DynamicProductConfiguration } from "@/lib/generation/dynamic-product-config";
import { formatProductConfigForPrompt } from "@/lib/generation/dynamic-product-config";

export interface EnterpriseImagePromptInput {
  companyName: string;
  industry: string;
  problem: string;
  impact: string;
  solution: string;
  headline: string;
  subheadline: string;
  visualConcept?: string;
  brandStyle: BrandVisualStyle;
  theme?: string;
  /** Optional prebuilt summary from company URL + brand (preferred). */
  mediaSummaryBrief?: string;
  /** Fully parameterized multi-solution product block. */
  product?: DynamicProductConfiguration | null;
}

function truncate(text: string, max: number): string {
  const trimmed = text.trim();
  if (trimmed.length <= max) return trimmed;
  return `${trimmed.slice(0, max - 1).trim()}…`;
}

/**
 * White-label human + infrastructure image prompt.
 * Headline and visuals come from DYNAMIC_PRODUCT_CONFIGURATION — never hardcode e-fax / paper distress.
 */
export function buildEnterpriseImagePrompt(input: EnterpriseImagePromptInput): string {
  const company = input.companyName.trim() || "the company";
  const product = input.product;
  const tagline = input.brandStyle.tagline?.trim() || "";
  const headline = truncate(
    product?.primaryHeadline || input.headline,
    72,
  ).toUpperCase() || `WORKFLOWS MOVE FASTER WITH ${company.toUpperCase()}.`;
  const subheadline = truncate(
    product?.subheadline ||
      input.subheadline ||
      input.impact ||
      input.brandStyle.ctaSubline ||
      `Clear friction and protect everyday operations.`,
    90,
  );
  const website =
    input.brandStyle.website?.replace(/^https?:\/\//i, "").replace(/\/$/, "") || "";
  const phone = input.brandStyle.contactPhone?.trim() || "";
  const email = input.brandStyle.contactEmail?.trim() || "";
  const ctaLabel =
    input.brandStyle.ctaLine?.trim().slice(0, 18).toUpperCase() || "LEARN MORE";
  const service =
    product?.solutionName || input.brandStyle.primaryService || input.industry || company;
  const humanFriction = truncate(product?.humanFrictionHook || input.problem, 140);
  const reliefMood = truncate(product?.primaryValueProp || input.impact, 120);
  const visual =
    product?.modernVisualDirection ||
    input.visualConcept ||
    input.brandStyle.productVisualHint ||
    "modern corporate managers reviewing a clean operations dashboard with soft natural light";

  return [
    `STYLE LOCK v2026-H2 WHITE-LABEL: High-end editorial B2B graphic for ${company}'s ${service}, 1080x1080 (1:1).`,
    `Markets: ${product?.markets || "US, UK, India"}.`,
    `Aesthetic: modern digital infrastructure + clear operational control — NOT 2005 paper-distress stock photography.`,
    `Palette: navy ${input.brandStyle.primaryColor}, accent/orange ${input.brandStyle.accentColor}, off-white / white.`,
    "",
    product ? formatProductConfigForPrompt(product) : "",
    "",
    "## Brand lock (parent brand — never invent)",
    `- Brand Name: ${company}`,
    tagline && !/revolutioniz|market your|best ever/i.test(tagline) ? `- Tone/tagline: "${tagline}"` : "- Ban empty buzzword taglines",
    website ? `- Website: ${website}` : "",
    phone ? `- Phone: ${phone}` : "",
    email ? `- Email: ${email}` : "- Email: omit (never invent info@)",
    "",
    "## NCERT friction contrast (mood + short on-image copy only)",
    humanFriction ? `Human friction: ${humanFriction}` : "",
    product?.narrativeContrast ? `Contrast: ${product.narrativeContrast}` : "",
    reliefMood ? `Backend stability / relief: ${reliefMood}` : "",
    "",
    "## Required layout",
    "1) LEFT ~½: authentic photograph of two diverse corporate managers calmly reviewing a large monitor in a modern workspace (soft natural ambient light).",
    `   Monitor content: ${product?.dashboardCue || "a clean professional ops/CRM dashboard for THIS solution"}.`,
    `   Visual metaphor: ${truncate(visual, 280)}`,
    "   Optional: subtle glowing data-stream lines into a secure cloud / database icon — visualise modern volume infrastructure, NEVER paper stacks or physical fax/printer machines.",
    "2) RIGHT ~½: minimalist typography block (off-white or deep navy) modeled after clean corporate editorial ads.",
    "3) Top-right: company logo + short verified tagline if clean.",
    `4) Prominent headline (legible): "${headline}"`,
    `5) Short accent subheadline: "${subheadline}"`,
    `6) Footer bar: ${[website, phone, email].filter(Boolean).join(" | ") || website || company} with small clean icons.`,
    `7) Orange CTA cue: "${ctaLabel}"`,
    "",
    input.mediaSummaryBrief
      ? `## Scraped company context\n${truncate(input.mediaSummaryBrief, 700)}`
      : "",
    "",
    "## HARD BANS (legacy / static look)",
    "- No physical fax machines, paper distress, frustrated-with-paper stock poses, printer heroes.",
    "- No hardcoded 'B2B E-FAXING' headlines when the active solution is DNC, SMS, dialer, email, call tracking, or CMS.",
    "- No flat vector silhouettes with truncated speech-bubble text.",
    "- No revolutionary / best-ever / market-your-service slogan dumps.",
    "Ultra high resolution, production-ready LinkedIn / Meta creative.",
  ]
    .filter(Boolean)
    .join("\n");
}
