/**
 * Service Pages Components - Shared Types
 *
 * All interfaces for the reusable service page components.
 * Server Components by default (no client-side interactivity).
 */

import type { LucideIcon } from "lucide-react";
import type { Icon as TablerIcon } from "@tabler/icons-react";

/** Icon type - supports Lucide, Tabler, or string name */
export type IconType = LucideIcon | TablerIcon | string;

/**
 * CTA Button configuration
 */
export interface CTAButton {
  /** Button text */
  text: string;
  /** Link destination */
  href: string;
  /** Open in new tab */
  external?: boolean;
}

/**
 * ServiceHero Component Props
 */
export interface ServiceHeroProps {
  /** Main heading - white text */
  title: string;
  /** Highlighted portion of title - orange gradient */
  highlightedText?: string;
  /** Secondary heading */
  subtitle: string;
  /** Supporting paragraph text */
  description?: string;
  /** Primary call-to-action button (used if customPrimaryCta not provided) */
  primaryCta?: CTAButton;
  /** Custom primary CTA element (e.g., CalButton) - overrides primaryCta */
  customPrimaryCta?: React.ReactNode;
  /** Optional secondary CTA button */
  secondaryCta?: CTAButton;
  /** Background image path (optimized with next/image) */
  backgroundImage?: string;
  /** Alt text for background image */
  backgroundAlt?: string;
  /** Minimum height of hero section */
  minHeight?: "sm" | "md" | "lg" | "full";
}

/**
 * Benefit item for BenefitsSection
 */
export interface BenefitItem {
  /** Icon component (Lucide/Tabler) or string name */
  icon: IconType;
  /** Benefit title */
  title: string;
  /** Benefit description */
  description: string;
}

/**
 * BenefitsSection Component Props
 */
export interface BenefitsSectionProps {
  /** Section heading */
  title: string;
  /** Highlighted part of heading (optional) */
  subtitle?: string;
  /** Section description paragraph */
  description?: string;
  /** Array of benefit items */
  items: BenefitItem[];
  /** Number of columns (responsive) */
  columns?: 2 | 3 | 4;
}

/**
 * Process step for ProcessSection
 */
export interface ProcessStep {
  /** Step number (auto-generated if not provided) */
  number?: number;
  /** Step title */
  title: string;
  /** Step description */
  description: string;
}

/**
 * ProcessSection Component Props
 */
export interface ProcessSectionProps {
  /** Section heading */
  title: string;
  /** Optional section description */
  subtitle?: string;
  /** Array of process steps */
  steps: ProcessStep[];
  /** Layout variant */
  variant?: "vertical" | "horizontal";
}

/**
 * Service item for ServicesGrid
 */
export interface ServiceItem {
  /** Icon component (Lucide/Tabler) or string name */
  icon: IconType;
  /** Service title */
  title: string;
  /** Service description */
  description: string;
  /** Optional link to service detail */
  href?: string;
}

/**
 * ServicesGrid Component Props
 */
export interface ServicesGridProps {
  /** Section heading */
  title: string;
  /** Optional section description */
  subtitle?: string;
  /** Array of service items */
  services: ServiceItem[];
  /** Number of columns (responsive) */
  columns?: 2 | 3 | 4;
}

/**
 * Audience segment for AudienceSection
 */
export interface AudienceSegment {
  /** Lucide icon component or icon name */
  icon: LucideIcon | string;
  /** Segment title */
  title: string;
  /** Segment description */
  description: string;
}

/**
 * AudienceSection Component Props
 */
export interface AudienceSectionProps {
  /** Section heading */
  title: string;
  /** Optional section description */
  subtitle?: string;
  /** Array of audience segments */
  segments: AudienceSegment[];
}

/**
 * Trust indicator for TrustSection
 */
export interface TrustItem {
  /** Lucide icon component or icon name */
  icon: LucideIcon | string;
  /** Trust indicator title */
  title: string;
  /** Trust indicator description */
  description: string;
}

/**
 * Partner logo for TrustSection
 */
export interface PartnerLogo {
  /** Logo image path */
  src: string;
  /** Partner name (alt text) */
  name: string;
  /** Optional link */
  href?: string;
}

/**
 * TrustSection Component Props
 */
export interface TrustSectionProps {
  /** Section heading */
  title: string;
  /** Optional section description */
  subtitle?: string;
  /** Array of trust indicators */
  items: TrustItem[];
  /** Optional partner logos */
  logos?: PartnerLogo[];
}

/**
 * ServiceCTA Component Props
 */
export interface ServiceCTAProps {
  /** CTA heading */
  title: string;
  /** Supporting text */
  description?: string;
  /** Primary CTA button */
  primaryCta: CTAButton;
  /** Optional secondary CTA button */
  secondaryCta?: CTAButton;
  /** Background variant */
  variant?: "gradient" | "dark" | "light";
}

/**
 * FAQ item for ServiceFAQ
 */
export interface FAQItem {
  /** Question text */
  question: string;
  /** Answer text (can include markdown) */
  answer: string;
}

/**
 * ServiceFAQ Component Props
 */
export interface ServiceFAQProps {
  /** Section heading */
  title: string;
  /** Optional section description */
  subtitle?: string;
  /** Array of FAQ items */
  items: FAQItem[];
}
