export type Locale = 'en' | 'fr' | 'ar';
export type Direction = 'ltr' | 'rtl';
export type EvidenceStatus = 'approved' | 'illustrative' | 'pending' | 'expired' | 'rejected';
export type ThemePreference = 'light' | 'dark' | 'system';

export interface LinkModel {
  id: string;
  label: string;
  href: string;
  external?: boolean;
}
export interface SiteHeaderProps {
  locale: Locale;
  direction: Direction;
  links: LinkModel[];
  login?: LinkModel;
  onDemo(): void;
}
export interface DrawerProps extends SiteHeaderProps {
  open: boolean;
  onOpenChange(open: boolean): void;
  returnFocusRef?: HTMLElement | null;
}
export interface LocaleSelectorProps {
  locale: Locale;
  routeId: string;
  hash?: string;
  onLocaleChange(locale: Locale): void;
}
export interface ThemeSelectorProps {
  preference: ThemePreference;
  onPreferenceChange(value: ThemePreference): void;
}
export interface HeroModel {
  eyebrow: string;
  title: string;
  body: string;
  primaryLabel: string;
  secondaryLabel: string;
}
export interface ProductPreviewModel {
  status: EvidenceStatus;
  caption: string;
  locale: Locale;
  direction: Direction;
  theme: 'light' | 'dark';
  assetId?: string;
}
export interface LifecycleItem {
  id: string;
  title: string;
  description: string;
  icon: string;
}
export interface ComparisonModel {
  title: string;
  body: string;
  before: { title: string; items: string[] };
  after: { title: string; items: string[] };
}
export interface WorkflowStep {
  id: string;
  ordinal: string;
  title: string;
  description: string;
}
export interface RoleCard {
  id: string;
  title: string;
  description: string;
}
export interface ModuleCard {
  id: string;
  title: string;
  description: string;
  evidenceStatus: EvidenceStatus;
}
export interface MetricDefinition {
  id: string;
  title: string;
  definition: string;
  publishedValue?: never;
}
export interface IntegrationCategory {
  id: string;
  label: string;
  verifiedPartners?: never;
}
export interface SecurityCheck {
  id: string;
  title: string;
  description: string;
  certificationBadge?: never;
}
export interface PricingModel {
  mode: 'quote-only' | 'approved-pricing';
  title: string;
  body: string;
  factors: string[];
  note: string;
}
export interface FaqItem {
  id: string;
  question: string;
  answer: string;
}
export interface DemoFormValues {
  fullName: string;
  workEmail: string;
  company: string;
  fleetSize: string;
  market?: string;
  preferredLanguage?: Locale;
  message?: string;
}
export type DemoFormState =
  | 'idle'
  | 'validating'
  | 'submitting'
  | 'success'
  | 'recoverable_error'
  | 'terminal_error';
export interface DemoFormProps {
  state: DemoFormState;
  values: DemoFormValues;
  fieldErrors: Partial<Record<keyof DemoFormValues, string>>;
  formError?: string;
  onSubmit(values: DemoFormValues): Promise<void>;
}
export interface TourProps {
  steps: WorkflowStep[];
  activeIndex: number;
  open: boolean;
  onOpenChange(open: boolean): void;
  onStepChange(index: number): void;
}
