import React from 'react';
import ReactDOM from 'react-dom';

import { DeviceRecognition, PlayerFramework } from '@sky-uk-ott/client-lib-js-ctv-framework-main';
import { AndroidDeviceFactory } from '@sky-uk-ott/client-lib-js-ctv-framework-android';
import { BrowserDeviceFactory } from '@sky-uk-ott/client-lib-js-ctv-framework-browser';
import { TizenDeviceFactory } from '@sky-uk-ott/client-lib-js-ctv-framework-tizen';
import { UWPDeviceFactory } from '@sky-uk-ott/client-lib-js-ctv-framework-uwp';
import { WebmafDeviceFactory } from '@sky-uk-ott/client-lib-js-ctv-framework-webmaf';
import { WebOSDeviceFactory } from '@sky-uk-ott/client-lib-js-ctv-framework-webos';
import { DeviceFactory, DeviceType } from '@sky-uk-ott/client-lib-js-player-addons-common-player';
import App from './app';

const APP_ID = 'Player Framework - React Reference App';
const STARTING_BITRATE = 3500000;

function getCurrentDeviceFactory(): DeviceFactory {
    const deviceType = DeviceRecognition.getCurrentDeviceType(window);
    switch (deviceType) {
        case DeviceType.Android:
            return new AndroidDeviceFactory();
        case DeviceType.Browser:
            return new BrowserDeviceFactory();
        case DeviceType.WebMaf:
        case DeviceType.PS3:
        case DeviceType.PS4:
            return new WebmafDeviceFactory();
        case DeviceType.Tizen:
            return new TizenDeviceFactory();
        case DeviceType.WebOS:
            return new WebOSDeviceFactory(APP_ID, STARTING_BITRATE);
        case DeviceType.XboxOne:
            return new UWPDeviceFactory(APP_ID);
        default:
            throw new Error(`Device Type ${deviceType} not supported.`);
    }
}

(window as any).PlayerFramework = PlayerFramework;
PlayerFramework.registerDeviceFactory(getCurrentDeviceFactory());
PlayerFramework.initialise().then(() => ReactDOM.render(<App />, document.getElementById('react')));
