import { BlazePlayerType } from '../interfaces/common.interface';
import { BlazeGlobalEvents } from '../shared/BlazeGlobalEvents';

export interface BlazeCastingDelegate {
    onCastingStateChanged?: (params: BlazeCastingStateChangedParams) => void;
}

export interface BlazeCastingStateChangedParams {
    playerType: BlazePlayerType;
    sourceId?: string;
    state: 'on' | 'off';
}

export class BlazeCastingDelegateHelper {

    static registerCastingDelegate(delegate?: BlazeCastingDelegate | null) {
        BlazeCastingDelegateHelper.onCastingStateChanged(delegate?.onCastingStateChanged)
    }

    private static onCastingStateChanged(
        callback?: (params: BlazeCastingStateChangedParams) => void,
    ) {
        const eventName = 'Blaze.onCastingStateChanged'
        if (callback) {
            BlazeGlobalEvents.createEventSubscription(
                eventName,
                (data: any) => {
                    try {
                        if (data) {
                            callback({
                                playerType: data['playerType'] as BlazePlayerType,
                                sourceId: data['sourceId'],
                                state: data['state'],
                            });
                        }
                    } catch (e) {
                        console.error('onCastingStateChanged', e);
                    }
                },
            );
        } else {
            BlazeGlobalEvents.cancelEventSubscription(eventName)
        }
    }

}