/**
 * Consent SDK Types — Configuration
 */

import type { ConsentCategory, ConsentState } from './core';

// =============================================================================
// Configuration
// =============================================================================

/**
 * UI-Position des Banners
 */
export type BannerPosition = 'bottom' | 'top' | 'center';

/**
 * Banner-Layout
 */
export type BannerLayout = 'bar' | 'modal' | 'floating';

/**
 * Farbschema
 */
export type BannerTheme = 'light' | 'dark' | 'auto';

/**
 * UI-Konfiguration
 */
export interface ConsentUIConfig {
  /** Position des Banners */
  position?: BannerPosition;

  /** Layout-Typ */
  layout?: BannerLayout;

  /** Farbschema */
  theme?: BannerTheme;

  /** Pfad zu Custom CSS */
  customCss?: string;

  /** z-index fuer Banner */
  zIndex?: number;

  /** Scroll blockieren bei Modal */
  blockScrollOnModal?: boolean;

  /** Custom Container-ID */
  containerId?: string;
}

/**
 * Consent-Verhaltens-Konfiguration
 */
export interface ConsentBehaviorConfig {
  /** Muss Nutzer interagieren? */
  required?: boolean;

  /** "Alle ablehnen" Button sichtbar */
  rejectAllVisible?: boolean;

  /** "Alle akzeptieren" Button sichtbar */
  acceptAllVisible?: boolean;

  /** Einzelne Kategorien waehlbar */
  granularControl?: boolean;

  /** Einzelne Vendors waehlbar */
  vendorControl?: boolean;

  /** Auswahl speichern */
  rememberChoice?: boolean;

  /** Speicherdauer in Tagen */
  rememberDays?: number;

  /** Nur in EU anzeigen (Geo-Targeting) */
  geoTargeting?: boolean;

  /** Erneut nachfragen nach X Tagen */
  recheckAfterDays?: number;
}

/**
 * TCF 2.2 Konfiguration
 */
export interface TCFConfig {
  /** TCF aktivieren */
  enabled?: boolean;

  /** CMP ID */
  cmpId?: number;

  /** CMP Version */
  cmpVersion?: number;
}

/**
 * PWA-spezifische Konfiguration
 */
export interface PWAConfig {
  /** Offline-Unterstuetzung aktivieren */
  offlineSupport?: boolean;

  /** Bei Reconnect synchronisieren */
  syncOnReconnect?: boolean;

  /** Cache-Strategie */
  cacheStrategy?: 'stale-while-revalidate' | 'network-first' | 'cache-first';
}

/**
 * Haupt-Konfiguration fuer ConsentManager
 */
export interface ConsentConfig {
  // Pflichtfelder
  /** API-Endpunkt fuer Consent-Backend */
  apiEndpoint: string;

  /** Site-ID */
  siteId: string;

  // Sprache
  /** Sprache (ISO 639-1) */
  language?: string;

  /** Fallback-Sprache */
  fallbackLanguage?: string;

  // UI
  /** UI-Konfiguration */
  ui?: ConsentUIConfig;

  // Verhalten
  /** Consent-Verhaltens-Konfiguration */
  consent?: ConsentBehaviorConfig;

  // Kategorien
  /** Aktive Kategorien */
  categories?: ConsentCategory[];

  // TCF
  /** TCF 2.2 Konfiguration */
  tcf?: TCFConfig;

  // PWA
  /** PWA-Konfiguration */
  pwa?: PWAConfig;

  // Callbacks
  /** Callback bei Consent-Aenderung */
  onConsentChange?: (consent: ConsentState) => void;

  /** Callback wenn Banner angezeigt wird */
  onBannerShow?: () => void;

  /** Callback wenn Banner geschlossen wird */
  onBannerHide?: () => void;

  /** Callback bei Fehler */
  onError?: (error: Error) => void;

  // Debug
  /** Debug-Modus aktivieren */
  debug?: boolean;
}
