import type { BrandProfile, PostSequenceItem, Project } from "@/types/workflow";
import {
  buildStoryContextPreview,
  getStoryArcForProject,
  isEfaxProject,
  storyBeatToSequenceTemplate,
} from "./story-context-builder";
import type { WebsiteIntelligence } from "./website-intelligence";

export const DEFAULT_CONTEXT_NAME = "Campaign Sequence";

/** Active sequence size for generation/scheduling — keep loops on this count. */
export const MAX_SEQUENCE_POSTS = 5;

export interface SequenceTemplate {
  title: string;
  summary: string;
  tag: string;
}

const DEMO_BRAND: BrandProfile = {
  companyName: "",
  tagline: "",
  industry: "Technology / Software",
  brandVoice: "Professional",
  logoDataUrl: null,
  logoFileName: null,
  contactPhone: "",
  contactEmail: "",
};

const DEMO_PROJECT: Project = {
  id: "",
  name: "Demo",
  website: "",
  industry: "Technology / Software",
  timezone: "UTC",
  countries: [],
  status: "active",
  createdAt: "",
  updatedAt: "",
};

/** @deprecated Use getStoryArcForProject with website — kept for type compatibility */
export const DEFAULT_SEQUENCE_TEMPLATES: SequenceTemplate[] = getStoryArcForProject(
  DEMO_BRAND,
  DEMO_PROJECT,
).map(storyBeatToSequenceTemplate);

export function getSequenceTemplatesForProject(
  brand: BrandProfile,
  project: Project,
  website?: WebsiteIntelligence | null,
): SequenceTemplate[] {
  return getStoryArcForProject(brand, project, website).map(storyBeatToSequenceTemplate);
}

export function createDefaultSequencePosts(
  brand?: BrandProfile,
  project?: Project,
  website?: WebsiteIntelligence | null,
): PostSequenceItem[] {
  const templates =
    brand && project
      ? getSequenceTemplatesForProject(brand, project, website)
      : getStoryArcForProject(DEMO_BRAND, DEMO_PROJECT).map(storyBeatToSequenceTemplate);

  return templates.slice(0, MAX_SEQUENCE_POSTS).map((template, index) => ({
    id: `seq-${index + 1}`,
    title: template.title,
    summary: template.summary,
    tag: template.tag,
    content: "",
  }));
}

export function buildBrandContextPreview(
  templateIndex: number,
  brand: BrandProfile,
  project: Project,
  campaignName?: string,
  website?: WebsiteIntelligence | null,
): string {
  return buildStoryContextPreview(templateIndex, brand, project, campaignName, website);
}

export function normalizeSequenceItem(
  raw: Partial<PostSequenceItem> & { description?: string },
  index: number,
): PostSequenceItem {
  const fallback = DEFAULT_SEQUENCE_TEMPLATES[index];

  if (raw.title && raw.summary) {
    return {
      id: raw.id ?? `seq-${index + 1}`,
      title: raw.title,
      summary: raw.summary,
      tag: raw.tag ?? fallback?.tag ?? "General",
      content: raw.content ?? "",
    };
  }

  const content = raw.content?.trim() ?? "";
  const firstLine = content.split("\n").find((l) => l.trim()) ?? "";

  return {
    id: raw.id ?? `seq-${index + 1}`,
    title: firstLine.startsWith("Post ")
      ? firstLine
      : fallback?.title ?? `Post ${index + 1}`,
    summary: raw.summary ?? raw.description ?? fallback?.summary ?? "",
    tag: raw.tag ?? fallback?.tag ?? "General",
    content,
  };
}

export { isEfaxProject, getStoryArcForProject, parseStoryContextSections, buildLibraryStoryArc } from "./story-context-builder";
export { CONTEXT_LIBRARY, selectContextArcForIndustry } from "./context-library";
export { buildCreativeBriefBeat, buildStoryArcFromSources } from "./creative-brief-builder";
export { NARRATIVE_SCAFFOLD, getNarrativeScaffold } from "./narrative-scaffold";
