import { NativeEventEmitter, NativeModules } from 'react-native'; import type { EmitterSubscription } from 'react-native'; // Resolve BBPlayerModule for event emitter let BBPlayerModule: any = null; try { BBPlayerModule = require('./specs/NativeBBPlayerModule').default; } catch { // TurboModule not available } if (!BBPlayerModule) { BBPlayerModule = NativeModules.BBPlayerModule; } const eventEmitter = BBPlayerModule ? new NativeEventEmitter(BBPlayerModule) : new NativeEventEmitter(); export interface CastSessionEvent { connected: boolean; deviceName?: string; error?: string; } /** * Listen for Chromecast session state changes (connect/disconnect). * Emitted by the native module when Google Cast session starts, resumes, ends, or suspends. * Returns an EmitterSubscription — call .remove() to unsubscribe. * * @example * ```ts * const sub = addCastSessionListener((event) => { * console.log(event.connected ? `Connected to ${event.deviceName}` : 'Disconnected'); * }); * // Later: sub.remove(); * ``` */ export function addCastSessionListener( callback: (event: CastSessionEvent) => void, ): EmitterSubscription { return eventEmitter.addListener('castSessionChanged', callback); }