/**
 * Device-local layer state — was tatsächlich an/aus ist auf dem Gerät.
 * Plattform-spezifisch: iOS hat urlFilter+familyControls, Android hat
 * vpn+accessibility+tamperLock. Felder die auf der jeweils anderen
 * Plattform irrelevant sind, sind undefined.
 */
export type DeviceLayers = {
  // iOS
  urlFilter?: boolean;
  familyControls?: boolean;
  appDeletionLock?: boolean;
  // Android
  vpn?: boolean;
  accessibility?: boolean;
  tamperLock?: boolean;
  // Shared
  blocklistCount: number;
  blocklistLastSyncAt: string | null;
};

export type ActivateResult = {
  allLayersOn: boolean;
  /**
   * Welche Layer der User noch aktivieren muss (z.B. weil ein
   * System-Permission-Dialog abgelehnt wurde). Wenn allLayersOn=true → leer.
   */
  missingLayers: ProtectionLayerKey[];
  /**
   * Detaillierte Native-Errors für UX-relevante Diagnose. Leer wenn alle
   * Layers durchgekommen sind. Beispiele: NEFilter saveToPreferences-Failure,
   * Family Controls Authorization denied.
   */
  errors?: string[];
};

export type DisableResult = {
  allLayersOff: boolean;
};

export type ProtectionLayerKey =
  | "urlFilter"
  | "familyControls"
  | "appDeletionLock"
  | "vpn"
  | "accessibility"
  | "tamperLock";

export type SyncBlocklistOpts = {
  baseURL: string;
  authToken: string;
};

export type SyncBlocklistResult = {
  updated: boolean;
  count: number;
  plan?: string;
};

export type HealthProbeOutcome = "blocked" | "loaded" | "offline" | "timeout";

export type HealthProbeOpts = {
  /** Default: https://bet365.com — sollte sicher in der Blocklist stehen. */
  target?: string;
  /** Default 5s. */
  timeoutSeconds?: number;
};

export type HealthProbeResult = {
  outcome: HealthProbeOutcome;
  reason: string;
  durationMs: number;
  target: string;
};

export type SystemSettingsTarget =
  /** Android: Settings → Network → VPN. */
  | "vpn"
  /** Android: Settings → Accessibility (Bedienungshilfen). */
  | "accessibility"
  /** iOS: Settings → Screen Time → Family Controls. */
  | "screenTime"
  /** iOS+Android: App-Notifications-Settings. */
  | "notifications";

/**
 * Events die das native Modul fired wenn sich Device-Layer State ändert
 * (z.B. User schaltet VPN extern aus, deaktiviert A11y, oder NEFilter-Config
 * wurde von außen entfernt). Der App-State-Watchdog hängt darauf.
 */
export type RebreakProtectionEvents = {
  onLayerChange: (state: DeviceLayers) => void;
};
