/** Named social banner layouts driven by media layout seed + scene planner. */

export type BannerLayoutId =
  | "right_image"
  | "left_image"
  | "center_cta"
  | "feature_focused"
  | "statistics_focused"
  | "full_bleed"
  | "top_hero"
  | "bottom_hero"
  | "split_card"
  | "infographic"
  | "timeline"
  | "enterprise_dashboard";

export const BANNER_LAYOUT_IDS: BannerLayoutId[] = [
  "right_image",
  "left_image",
  "center_cta",
  "feature_focused",
  "statistics_focused",
  "full_bleed",
  "top_hero",
  "bottom_hero",
  "split_card",
  "infographic",
  "timeline",
  "enterprise_dashboard",
];

export function resolveBannerLayoutId(layoutSeed: number): BannerLayoutId {
  const idx = Math.abs(layoutSeed) % BANNER_LAYOUT_IDS.length;
  return BANNER_LAYOUT_IDS[idx]!;
}

/**
 * Pick a layout from seed, optionally excluding the previous generation's layout.
 * sequenceIndex spreads layouts across posts in a campaign.
 */
export function pickBannerLayout(
  layoutSeed: number,
  excludeLayoutId?: BannerLayoutId | null,
  sequenceIndex = 1,
): BannerLayoutId {
  // Offset by sequence beat so Post 1 vs Post 3 rarely share the same default layout.
  const offset = ((sequenceIndex - 1) * 5 + (layoutSeed >>> 4)) % BANNER_LAYOUT_IDS.length;
  const primary = BANNER_LAYOUT_IDS[offset]!;
  if (!excludeLayoutId || primary !== excludeLayoutId) return primary;

  const pool = BANNER_LAYOUT_IDS.filter((id) => id !== excludeLayoutId);
  if (!pool.length) return primary;
  const idx = Math.abs((layoutSeed >>> 1) + sequenceIndex * 3 + 7) % pool.length;
  return pool[idx]!;
}

export interface BannerTypographyScale {
  headlineSize: number;
  headlineLineHeight: number;
  subSize: number;
  featureLabelSize: number;
  featureDetailSize: number;
  ctaSize: number;
  /** Primary headline font stack */
  headlineFont: string;
  bodyFont: string;
  letterSpacing: number;
}

/** Typography variation — still system-safe for SVG/social APIs. */
export function resolveBannerTypography(layoutSeed: number): BannerTypographyScale {
  const family = layoutSeed % 3;
  const denser = layoutSeed % 2 === 0;
  const headlineFont =
    family === 0
      ? "Georgia, 'Times New Roman', serif"
      : family === 1
        ? "'Trebuchet MS', 'Segoe UI', sans-serif"
        : "Arial, Helvetica, sans-serif";
  const bodyFont = "Arial, Helvetica, sans-serif";

  return {
    headlineSize: denser ? 30 : 34,
    headlineLineHeight: denser ? 38 : 42,
    subSize: denser ? 16 : 18,
    featureLabelSize: denser ? 14 : 15,
    featureDetailSize: denser ? 12 : 13,
    ctaSize: denser ? 17 : 20,
    headlineFont,
    bodyFont,
    letterSpacing: family === 0 ? 0.4 : 0.2,
  };
}
