export default class WebviewHandler {

    constructor(stateManager, ipcRenderer) {
        this._stateManager = stateManager;
        this._ipcRenderer = ipcRenderer;

        this._appPackage = this._ipcRenderer.sendSync('app', 'package');

        this._partition = 'persist:opendesktop';
        this._preload = './scripts/renderers/webview.js';
        this._startPage = this._ipcRenderer.sendSync('store', 'startPage');
        this._isDebugMode = this._ipcRenderer.sendSync('app', 'isDebugMode');

        this._webviewComponent = null;

        this._subscribe();
    }

    _subscribe() {
        this._stateManager.actionHandler
            .add('webview_activate', (data) => {
                this._webviewComponent = data.component;
                return {isActivated: true};
            })
            .add('webview_config', () => {
                return {
                    partition: this._partition,
                    preload: this._preload,
                    startPage: this._startPage,
                    isDebugMode: this._isDebugMode
                };
            })
            .add('webview_loading', (data) => {
                return {isLoading: data.isLoading};
            })
            .add('webview_page', (data) => {
                return {
                    startPage: this._startPage,
                    url: data.url,
                    title: data.title,
                    canGoBack: data.canGoBack,
                    canGoForward: data.canGoForward
                };
            })
            .add('webview_startPage', (data) => {
                if (data.url) {
                    this._startPage = data.url;
                    this._ipcRenderer.sendSync('store', 'startPage', this._startPage);
                }
                this._webviewComponent.loadUrl(this._startPage);
                return false;
            })
            .add('webview_loadUrl', (data) => {
                this._webviewComponent.loadUrl(data.url);
                return false;
            })
            .add('webview_goBack', () => {
                this._webviewComponent.goBack();
                return false;
            })
            .add('webview_goForward', () => {
                this._webviewComponent.goForward();
                return false;
            })
            .add('webview_reload', () => {
                this._webviewComponent.reload();
                return false;
            })
            .add('webview_stop', () => {
                this._webviewComponent.stop();
                return false;
            })
            .add('webview_appBugsPage', () => {
                this._webviewComponent.loadUrl(this._appPackage.bugs);
                return false;
            })
            .add('webview_loginPage', () => {
                this._webviewComponent.loadUrl('https://www.pling.com/login');
                return false;
            });
    }

}