import { z } from "zod";

// ── Schema delle sezioni generate dall'AI ──────────────────────────────────
// Le sezioni da OFFER DB (pricing tier) e CONFIG (bio/testimonianze) NON
// sono prodotte dall'AI e non fanno parte di questo schema.

export const ProblemNodeSchema = z.object({
  id: z.string(), // "01" | "02" | ... | "05"
  title: z.string(),           // es. "La voce non è una. Sono tre."
  subtitle: z.string(),        // es. "LA VOCE"
  body: z.string(),            // paragrafo descrittivo
  risk: z.string(),            // testo del box "IL RISCHIO"
  quote: z.string(),           // citazione verbatim dal transcript
  quoteAttribution: z.string(), // "NOME COGNOME · DISCOVERY YYYY-MM-DD"
});

export const SolutionNodeSchema = z.object({
  id: z.string(), // specchia il problem node
  title: z.string(),        // es. "Tre voci coordinate, un solo brand."
  subtitle: z.string(),     // es. "SOLUZIONE 01 · LA VOCE"
  transformation: z.string(), // testo del box "LA TRASFORMAZIONE"
  throughWhat: z.array(z.string()), // bullet "ATTRAVERSO COSA" (3 voci)
});

export const DiagramNodeSchema = z.object({
  id: z.string(),
  label: z.string(),
});

export const ScopeSectionSchema = z.object({
  scopeTitle: z.string(),
  scopeBody: z.string(),
  objectives: z.array(z.string()), // 3–5 bullet con "checkmark" visivo
});

export const DeliverablesSectionSchema = z.object({
  deliverables: z.array(z.string()), // elenco output finali (tier-agnostic, macro)
  outOfScope: z.array(z.string()),   // ciò che NON è incluso
});

export const TimelineSectionSchema = z.object({
  totalWeeks: z.number(),
  phases: z.array(z.object({
    label: z.string(),      // es. "Audit Strategico"
    startWeek: z.number(),
    endWeek: z.number(),
    color: z.enum(["cyan", "purple", "green"]), // palette fissa light-mode
  })),
  disclaimer: z.string(),
});

export const StagesRecapSchema = z.object({
  stages: z.array(z.object({
    number: z.string(),    // "01" | "02" | "03"
    tierLetter: z.string(), // "A" | "B" | "C"
    label: z.string(),     // es. "OPZIONE A – AUDIT"
    headline: z.string(),  // es. "Si capisce."
    body: z.string(),
    deliverable: z.string(), // es. "Audit decision document"
  })),
});

export const ComparisonRowSchema = z.object({
  component: z.string(),     // es. "Brand Architecture System"
  description: z.string(),   // sottotitolo
  inA: z.boolean(),
  inB: z.boolean(),
  inC: z.boolean(),
});

// Root schema — contenuto generato dall'AI
export const ProposalContentSchema = z.object({
  // Slide "dove andiamo" (02)
  vision: z.object({
    headline: z.string(),    // es. "Tre voci. Un solo brand."
    body: z.string(),        // paragrafo breve
  }),

  // Cap.02 — 5 nodi problema estratti dai transcript
  problems: z.array(ProblemNodeSchema).min(3).max(5),

  // Sintesi problema (5 nodi → 1 radice)
  problemSynthesis: z.object({
    rootCause: z.string(), // la domanda strategica non ancora risolta
    nodeLabels: z.array(z.string()).length(5), // label per il diagramma
  }),

  // Cap.03 — soluzioni mirror
  solutions: z.array(SolutionNodeSchema).min(3).max(5),

  // Sintesi soluzione (1 direzione → 5 elevazioni)
  solutionSynthesis: z.object({
    direction: z.string(),
    elevations: z.array(DiagramNodeSchema).length(5),
  }),

  // Cap.04 — scope, deliverable, timeline
  scope: ScopeSectionSchema,
  deliverables: DeliverablesSectionSchema,
  timeline: TimelineSectionSchema,

  // Slide di recap (3 tappe progressive)
  stagesRecap: StagesRecapSchema,

  // Tabella comparativa componenti × A/B/C
  comparisonMatrix: z.array(ComparisonRowSchema).min(4).max(10),
});

export type ProposalContent = z.infer<typeof ProposalContentSchema>;
export type ProblemNode = z.infer<typeof ProblemNodeSchema>;
export type SolutionNode = z.infer<typeof SolutionNodeSchema>;
export type ComparisonRow = z.infer<typeof ComparisonRowSchema>;
