import type { SpeakerTurn } from "./types"; const SPEAKER_LINE = /^((?:Speaker\s+\d+)(?:\s*\([^)]+\))?|[A-Za-z][^:]{0,40}):\s*(.+)$/; export function parseSpeakerTurns(transcript: string): SpeakerTurn[] { const turns: SpeakerTurn[] = []; for (const line of transcript.split("\n")) { const trimmed = line.trim(); if (!trimmed) continue; const match = trimmed.match(SPEAKER_LINE); if (match) { turns.push({ speaker: match[1].trim(), text: match[2].trim() }); } else if (turns.length > 0) { turns[turns.length - 1].text += ` ${trimmed}`; } else { turns.push({ speaker: "Speaker 1", text: trimmed }); } } return turns; } export function getUniqueSpeakers(turns: SpeakerTurn[]): string[] { const seen = new Set(); const speakers: string[] = []; for (const turn of turns) { if (!seen.has(turn.speaker)) { seen.add(turn.speaker); speakers.push(turn.speaker); } } return speakers; } export const SPEAKER_COLORS = [ "text-indigo-400", "text-emerald-400", "text-amber-400", "text-pink-400", "text-cyan-400", "text-violet-400", ]; export const SPEAKER_BG_COLORS = [ "bg-indigo-500/10 border-indigo-500/20", "bg-emerald-500/10 border-emerald-500/20", "bg-amber-500/10 border-amber-500/20", "bg-pink-500/10 border-pink-500/20", "bg-cyan-500/10 border-cyan-500/20", "bg-violet-500/10 border-violet-500/20", ]; export function speakerColorIndex(speaker: string, speakers: string[]): number { const idx = speakers.indexOf(speaker); return idx >= 0 ? idx % SPEAKER_COLORS.length : 0; }