import ngModule from '../module';

/**
 * The main application class.
 *
 * @property {String} name The application name.
 * @property {Snackbar} snackbar The main object to show messages.
 */
export default class App {
    constructor() {
        this.loaderStatus = 0;
        this.loading = false;
        this.versionInterval = setInterval(this.getVersion.bind(this), 300000);
    }

    showMessage(message) {
        if (this.logger)
            this.logger.showMessage(message);
    }

    showSuccess(message) {
        if (this.logger)
            this.logger.showSuccess(message);
    }

    showError(message, additionalData) {
        if (this.logger)
            this.logger.showError(message, additionalData);
    }

    pushLoader() {
        this.loaderStatus++;
        if (this.loaderStatus === 1)
            this.loading = true;
    }

    popLoader() {
        this.loaderStatus--;
        if (this.loaderStatus === 0)
            this.loading = false;
    }

    getVersion() {
        this.logger.$http.get('Applications/status');
    }

    setVersion(newVersion) {
        if (newVersion) {
            const currentVersion = localStorage.getItem('salix-version');
            if (newVersion != currentVersion) {
                this.hasNewVersion = true;
                clearInterval(this.versionInterval);
            }
            localStorage.setItem('salix-version', newVersion);
        }
    }

    getUrl(route, appName = 'lilium') {
        const env = process.env.NODE_ENV;
        const filter = {
            where: {and: [
                {appName: appName},
                {environment: env}
            ]}
        };

        return this.logger.$http.get('Urls/findOne', {filter})
            .then(res => {
                if (res && res.data)
                    return res.data.url + route;
            })
            .catch(() => {
                this.showError('Direction not found');
            });
    }
}

ngModule.service('vnApp', App);