export type CaptionBlockType = "paragraph" | "bullets" | "hashtags" | "quote";

export interface CaptionBlock {
  type: CaptionBlockType;
  lines: string[];
}

const BULLET_PREFIX = /^[\s]*([📈🎯⚡🔄✅•\-–]|\d+[\.\)])/u;
const HASHTAG_LINE = /^[\s]*#/;

function isBulletLine(line: string): boolean {
  return BULLET_PREFIX.test(line.trim());
}

function isHashtagLine(line: string): boolean {
  const trimmed = line.trim();
  return HASHTAG_LINE.test(trimmed) && trimmed.includes("#");
}

function isQuoteLine(line: string): boolean {
  const t = line.trim();
  return t.startsWith('"') || t.startsWith("\u201c");
}

/** Split AI caption into LinkedIn-style blocks for structured preview. */
export function parseCaptionBlocks(caption: string): CaptionBlock[] {
  const blocks: CaptionBlock[] = [];
  const paragraphs = caption.split(/\n\n+/);

  for (const paragraph of paragraphs) {
    const lines = paragraph
      .split("\n")
      .map((l) => l.trim())
      .filter(Boolean);

    if (!lines.length) continue;

    if (lines.every(isHashtagLine) || (lines.length === 1 && isHashtagLine(lines[0]))) {
      blocks.push({ type: "hashtags", lines });
      continue;
    }

    if (lines.some(isBulletLine) && lines.filter(isBulletLine).length >= lines.length / 2) {
      blocks.push({ type: "bullets", lines });
      continue;
    }

    if (lines.length === 1 && isQuoteLine(lines[0])) {
      blocks.push({ type: "quote", lines });
      continue;
    }

    blocks.push({ type: "paragraph", lines });
  }

  return blocks;
}
