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

export interface BlazePipDelegate {
    onPiPStateChanged?: (params: BlazePipStateChangedParams) => void;
}

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

export class BlazePipDelegateHelper {

    static registerPipDelegate(delegate?: BlazePipDelegate | null) {
        BlazePipDelegateHelper.onPiPStateChanged(delegate?.onPiPStateChanged)
    }

    private static onPiPStateChanged(
        callback?: (params: BlazePipStateChangedParams) => void,
    ) {
        const eventName = 'Blaze.onPiPStateChanged'
        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('onPiPStateChanged', e);
                    }
                },
            );
        } else {
            BlazeGlobalEvents.cancelEventSubscription(eventName)
        }
    }

}
