export interface ConversionCTAButton {
  text: string;
  variant?: 'filled' | 'tonal' | 'outlined';
  size?: 'small' | 'medium' | 'large';
  action: () => void;
  disabled?: boolean;
  loading?: boolean;
}

export interface CTASectionConfig {
  title: string;
  subtitle?: string;
  description?: string;
  ctaPrimary: ConversionCTAButton;
  ctaSecondary?: ConversionCTAButton;
  backgroundType: 'gradient' | 'pattern' | 'image' | 'solid';
  urgency?: UrgencyConfig;
  maxWidth?: 'sm' | 'md' | 'lg' | 'xl';
}

export interface UrgencyConfig {
  type: 'countdown' | 'limited-offer' | 'social-proof';
  text: string;
  endDate?: Date;
  remaining?: number;
}

export interface PricingTableConfig {
  plans: PricingPlan[];
  billingToggle: BillingToggle;
  featuresComparison: boolean;
  highlightedPlan?: string;
  maxWidth?: 'sm' | 'md' | 'lg' | 'xl';
}

export interface PricingPlan {
  id: string;
  name: string;
  price: PriceStructure;
  features: PricingFeature[];
  cta: ConversionCTAButton;
  badge?: string;
  popular?: boolean;
  description?: string;
}

export interface PriceStructure {
  monthly: number;
  yearly: number;
  currency: string;
  suffix?: string; // per user, per month, etc.
}

export interface PricingFeature {
  name: string;
  included: boolean;
  description?: string;
  highlight?: boolean;
}

export interface BillingToggle {
  monthlyLabel: string;
  yearlyLabel: string;
  discountText?: string;
}

export interface NewsletterSignupConfig {
  title: string;
  description?: string;
  placeholder: string;
  ctaText: string;
  privacyText?: string;
  successMessage: string;
  variant: 'inline' | 'modal' | 'sidebar' | 'footer';
  showPrivacyCheckbox?: boolean;
}

export interface ContactFormConfig {
  fields: FormField[];
  submitText: string;
  successMessage: string;
  layout: 'single-column' | 'two-column' | 'inline';
  validation: ValidationRules;
  title?: string;
  description?: string;
}

export interface FormField {
  type: 'text' | 'email' | 'tel' | 'textarea' | 'select' | 'checkbox';
  name: string;
  label: string;
  placeholder?: string;
  required: boolean;
  options?: SelectOption[];
  rows?: number; // for textarea
  validation?: FieldValidation;
}

export interface SelectOption {
  value: string;
  label: string;
}

export interface FieldValidation {
  minLength?: number;
  maxLength?: number;
  pattern?: string;
  custom?: (value: any) => string | null;
}

export interface ValidationRules {
  [fieldName: string]: FieldValidation;
}