/* Copyright CloudLinux Zug GmbH 2010-2017 All Rights Reserved
 *
 * Licensed under CLOUD LINUX LICENSE AGREEMENT
 * http://cloudlinux.com/docs/LICENSE.TXT
 */

import { Loader, LoaderSelector } from './loader';
import { ViewModes } from '../services/view_modes';
import { ViewMode } from '../model/view_mode';
import { UiSelectOption } from './ui-elements/ui-select/ui-select';
import { ElementRef } from '@angular/core';
import { AppState } from '../app.service';
import { InstanceInjector } from '../services/instance-injector';

declare const panelName: any;
declare const panelVersion: any;
declare var jQuery: any;

export class BaseComponent {

    public appState: AppState;
    public viewModes: ViewMode[] = ViewModes.availableModes;
    public availableViewModes: ViewMode[];
    public elementRef: ElementRef;

    public viewModesForPackages: ViewMode[] = ViewModes.availableModesForPackages();
    public availableViewModesForPackages: ViewMode[];

    public periodList: UiSelectOption[] = [
        {'id': 'seconds', 'caption': 'seconds'},
        {'id': 'minutes', 'caption': 'minutes'},
        {'id': 'hours', 'caption': 'hours'},
        {'id': 'days', 'caption': 'days'},
    ];

    public periodListShort: UiSelectOption[] = [
        {'id': 'hours', 'caption': 'hours'},
        {'id': 'days', 'caption': 'days'},
    ];

    public loaderSelector: LoaderSelector = null;
    private _loading: boolean = false;

    constructor() {
        this.availableViewModes = ViewModes.availableModes.filter((mode) => {
            return mode.active;
        });
        this.availableViewModesForPackages = ViewModes.availableModesForPackages()
            .filter((mode) => {
            return mode.active;
        });
    }


    get panelInfo(){
        let info = '';
        if (typeof panelName !== 'undefined') {
            info += panelName + '_';
        }
        if (typeof panelVersion !== 'undefined') {
            info += panelVersion;
        }
        return info;
    }

    set loading(value: boolean) {
        if (this.loaderSelector && value !== this._loading) {
            this._loading = value;
            setTimeout(() => {
                if (this.appState && !this.loaderSelector.showBigLoader) {
                    this.appState.set('menuLoader', value);
                    InstanceInjector.loadingBarServiceInstance[value ? 'start' : 'complete']();
                }
            });
            Loader[
                this.loaderSelector.showBigLoader ? '__switchBigLoader' : '__switchBlockingWrapper'
            ](jQuery(this.loaderSelector.selector), value);
        }
    }

    get loading() {
        return this._loading;
    }

}
