import { analyzeSocialMedia, getOrAnalyzeSocialMedia } from "@/lib/social-media-analysis";
import type { Business, SocialMediaAnalysis, SocialMediaRecommendation } from "@/lib/types";

export function ensureSocialAnalysis(business: Business): SocialMediaAnalysis {
  if (business.socialMediaAnalysis) return business.socialMediaAnalysis;
  return analyzeSocialMedia(business);
}

function topSocialRec(analysis: SocialMediaAnalysis, priority?: "high" | "medium"): SocialMediaRecommendation | undefined {
  const recs = analysis.recommendations.filter((r) => !priority || r.priority === priority);
  return recs[0] ?? analysis.recommendations[0];
}

function topCompetitor(analysis: SocialMediaAnalysis) {
  return analysis.pickShare.find((p) => !p.isYou);
}

function primaryPlatform(business: Business): string {
  const profiles = business.digitalPresence?.socialProfiles ?? [];
  const order = ["instagram", "facebook", "linkedin", "tiktok", "google", "youtube", "x"];
  const match = order.find((p) => profiles.some((s) => s.platform === p));
  return match ?? "instagram";
}

export function buildSocialAnalysisPostPack(business: Business): string {
  const analysis = ensureSocialAnalysis(business);
  const rec = topSocialRec(analysis, "high");
  const topRec = business.recommendations[0];
  const topOpp = [...business.opportunities].sort((a, b) => b.estimatedValue - a.estimatedValue)[0];
  const platform = primaryPlatform(business);

  return [
    `📊 Based on social analysis (visibility ${analysis.visibilityScore}/100 · pick share ${analysis.yourPickSharePercent}%)`,
    ``,
    `--- Post 1 · ${platform} · ${rec?.title ?? "Visibility boost"} ---`,
    rec?.action ?? `Highlight ${business.input.businessName}'s top offer in ${business.input.location}.`,
    ``,
    `Caption draft:`,
    topRec?.socialPost ??
      `${business.input.businessName} — ${business.metrics.topPriorityToday}. ${topOpp?.recommendedAction ?? topRec?.whatToDoNext ?? "Link in bio to book."}`,
    ``,
    `Hashtags: #${business.input.location.split(",")[0]?.trim().replace(/\s+/g, "") ?? "Local"} #${business.input.industry.replace(/\s+/g, "")}`,
    ``,
    `--- Post 2 · Story / Reel hook ---`,
    `"${analysis.trust.verdict.slice(0, 120)}…"`,
    `CTA: Tap to see why ${analysis.yourPickSharePercent}% of buyers pick us vs competitors.`,
    ``,
    `--- Post 3 · Review / proof ---`,
    analysis.trust.socialTrustNotes[0] ?? "Share a customer win or Google review screenshot.",
    `Expected impact: ${rec?.expectedImpact ?? "Close visibility gap vs industry leaders"}`,
  ].join("\n");
}

export function buildSocialTrustSyncContent(business: Business): string {
  const analysis = ensureSocialAnalysis(business);
  const { trust } = analysis;
  const websiteRec = business.websiteAestheticAnalysis?.recommendations.find((r) => r.priority === "high");

  if (trust.strongerChannel === "social") {
    return [
      `# Trust sync: social → website`,
      ``,
      `Social trust (${trust.socialTrustScore}/100) beats website (${trust.websiteTrustScore}/100).`,
      ``,
      `Homepage hero add (mirror social):`,
      `"${business.profile.brandPositioning.slice(0, 100)}…"`,
      ``,
      `Pull onto website from social:`,
      ...trust.socialTrustNotes.slice(0, 2).map((n) => `• ${n}`),
      ``,
      `Pinned post / story highlight:`,
      `"Why ${business.input.location} trusts ${business.input.businessName} — ${analysis.yourPickSharePercent}% pick rate"`,
      websiteRec ? `Website fix to pair: ${websiteRec.title}` : "",
    ]
      .filter(Boolean)
      .join("\n");
  }

  if (trust.strongerChannel === "website") {
    return [
      `# Trust sync: website → social`,
      ``,
      `Website trust (${trust.websiteTrustScore}/100) beats social (${trust.socialTrustScore}/100).`,
      ``,
      `Repurpose for Instagram/Facebook pinned post:`,
      ...trust.websiteTrustNotes.slice(0, 2).map((n) => `• ${n}`),
      ``,
      `Carousel slide 1: "${business.recommendations[0]?.landingHeadline ?? business.input.businessName}"`,
      `Carousel slide 2: ${business.profile.strengths[0] ?? "Our guarantee"}`,
      `Carousel slide 3: CTA — ${business.recommendations[0]?.whatToDoNext?.slice(0, 80) ?? "Book today"}`,
    ].join("\n");
  }

  return [
    `# Trust sync: balanced channels`,
    ``,
    `Website ${trust.websiteTrustScore}/100 · Social ${trust.socialTrustScore}/100 — keep messaging identical.`,
    ``,
    `Unified headline everywhere:`,
    `"${business.recommendations[0]?.landingHeadline ?? `${business.input.businessName} — ${business.input.location}`}"`,
    ``,
    trust.verdict,
  ].join("\n");
}

export function buildSocialCompetitivePost(business: Business): string {
  const analysis = ensureSocialAnalysis(business);
  const you = analysis.pickShare.find((p) => p.isYou);
  const rival = topCompetitor(analysis);
  const beat = business.competitors.find((c) => c.name === rival?.name)?.beatOpportunity ?? rival?.reason;

  return [
    `# Competitive social post vs ${rival?.name ?? "top competitor"}`,
    ``,
    `Pick share: You ${you?.pickSharePercent ?? analysis.yourPickSharePercent}% · ${rival?.name ?? "Competitor"} ${rival?.pickSharePercent ?? "?"}%`,
    ``,
    `Instagram/Facebook caption:`,
    `Choosing ${business.input.industry.toLowerCase()} in ${business.input.location}? Here's why neighbors pick ${business.input.businessName}:`,
    ``,
    `✓ ${business.profile.strengths[0] ?? "Trusted local team"}`,
    `✓ ${beat?.split(".")[0] ?? "Better service, clearer pricing"}`,
    `✓ ${analysis.trust.socialTrustNotes[0]?.replace(/^•?\s*/, "") ?? "Real reviews from real customers"}`,
    ``,
    `CTA: ${business.recommendations[0]?.whatToDoNext ?? business.opportunities[0]?.recommendedAction ?? "DM us or tap link in bio"}`,
    ``,
    `Do NOT name competitor directly in public post — imply comparison ("tired of surprise fees?" etc.)`,
  ].join("\n");
}

export function enrichDraftSocialPost(business: Business, fallback: string): string {
  const analysis = getOrAnalyzeSocialMedia(business);
  const rec = topSocialRec(analysis, "high");
  if (!rec) return fallback;
  return [
    fallback,
    ``,
    `[Social analysis · visibility ${analysis.visibilityScore}/100]`,
    `Angle: ${rec.title} — ${rec.action}`,
  ].join("\n");
}
