/**
 * Shared types for service pages and services landing.
 * Used by content modules and components for localization-ready structure.
 */

export interface ServiceHeroSecondaryCta {
    href: string;
    label: string;
    umamiEventLabel: string;
}

export interface ServiceHeroContent {
    title: string;
    subtitle: string;
    bookingLinkTitle: string;
    bookingLinkUrl: string;
    secondaryCta?: ServiceHeroSecondaryCta;
}

export interface ServiceTocItem {
    label: string;
    href: string;
}

export interface ServiceFooterLink {
    label: string;
    href: string;
}

export interface ServiceSectionContent {
    id: string;
    heading: string;
    headingId?: string;
    /** If true, heading is visually hidden (sr-only) for accessibility */
    headingSrOnly?: boolean;
    /** Extra class(es) for the section element (e.g. service-credibility) */
    sectionClass?: string;
    /** Use narrow; set false for full-width strips (e.g. credibility) */
    narrowContainer?: boolean;
    /** Optional class for the bullets ul (e.g. service-credibility__list) */
    bulletsListClass?: string;
    lede?: string;
    paragraphs?: string[];
    bullets?: string[];
    orderedBullets?: string[];
    /** Paragraph(s) rendered after bullets (e.g. "Speed isn't the problem. Structure is.") */
    trailingParagraphs?: string[];
    /** Inline links (e.g. cross-links to other services) rendered after content */
    footerLinks?: ServiceFooterLink[];
    /** Optional sub-sections: h3 + content (paragraphs and/or bullets) */
    subsections?: Array<{
        heading: string;
        headingId?: string;
        paragraphs?: string[];
        bullets?: string[];
    }>;
}

export interface WhoGridContent {
    whoForList: string[];
    whoNotList: string[];
    title?: string;
    showTitle?: boolean;
    whoForHeading?: string;
    whoNotHeading?: string;
}

export interface ServiceScheduleCta {
    title: string;
    subtitle: string;
    bookingLinkTitle: string;
    bookingLinkUrl: string;
    showEmailLink?: boolean;
    showServicesLink?: boolean;
    sectionId?: string;
    headingId?: string;
}

/** Nav item for service/landing page navigation */
export interface ServiceNavItem {
    label: string;
    href: string;
    umamiEventLabel: string;
}

/** Service card for the services landing grid */
export interface ServiceCard {
    title: string;
    description: string;
    href: string;
}

/** Term/definition for "How engagements work" dl on landing */
export interface EngagementItem {
    term: string;
    definition: string;
}

/** SEO meta for use in +page.ts (single source of truth with content) */
export interface ServicePageMeta {
    title: string;
    description: string;
    /** Optional short description for JSON-LD ProfessionalService */
    jsonLdServiceDescription?: string;
}

/** Content shape for the services landing page */
export interface ServicesLandingContent {
    hero: ServiceHeroContent;
    navItems: ServiceNavItem[];
    introParagraphs: string[];
    services: ServiceCard[];
    engagements: EngagementItem[];
    engagementsIntro?: string;
    engagementsOutro?: string;
    idealClients: string[];
    scheduleCta: ServiceScheduleCta;
    meta: ServicePageMeta;
}

/** Content shape for a service detail page */
export interface ServiceDetailContent {
    hero: ServiceHeroContent;
    tocItems: ServiceTocItem[];
    navItems: ServiceNavItem[];
    sections: ServiceSectionContent[];
    who: WhoGridContent;
    scheduleCta: ServiceScheduleCta;
    /** Optional FAQ section title override */
    faqTitle?: string;
    meta: ServicePageMeta;
}
