﻿import { Injectable, OnInit } from '@angular/core';
import { Subject }    from 'rxjs/Subject';
import { TfabricaUserData } from '../models/tfabrica.userdata.model';
import { TfabricaSettingsData } from '../models/tfabrica.settings.model';
import { TfabricaUserMenu } from '../models/tfabrica.usermenu.model';

@Injectable()
export class TfabricaSharedService implements OnInit  {

    public appSettings: TfabricaSettingsData;
    public userData: TfabricaUserData;
    public currentLang: string = "";
    public supportedLanguages: any[];
    public selectedVoice: TfabricaUserMenu;


    private _changeUserData = new Subject<TfabricaUserData>();
    private _toggleMainLeftSidenav = new Subject<boolean>();
    private _translationsReady = new Subject<boolean>();
    private _changeTranslationsLanguage = new Subject<string>();


    userDataLogged$ = this._changeUserData.asObservable();
    mainLeftSidenavToggled$ = this._toggleMainLeftSidenav.asObservable();
    translationsReady$ = this._translationsReady.asObservable();
    changeTranslationsLanguage$ = this._changeTranslationsLanguage.asObservable();

    constructor(
    ) {
        
    }

    ngOnInit() {
        this.userData = new TfabricaUserData();
        this.currentLang = "en";
        this.selectedVoice = new TfabricaUserMenu();
    }

    userLogged(userData: TfabricaUserData) {
        
        console.log("TfabricaSharedService userLogged:");
        this.userData = userData;
        if (userData != null) {
            this.selectLang(userData.language);
        }
        this._changeUserData.next(userData);

        localStorage.setItem('userData', JSON.stringify(this.userData));
    }

    logout() {
        localStorage.removeItem('userData');
    }

    translationsIsReady(supportedLanguages: any[]) {
        this.supportedLanguages = supportedLanguages;
        this._translationsReady.next(true);
    }

    toggleMainLeftSidenav(status: boolean) {
        this._toggleMainLeftSidenav.next(status);
    }

    getUser() {
        //return this.tfabricaLoginService.getUser();
        return this.userData;
    }

    isLogged() {
        try {
            this.userData = JSON.parse(localStorage.getItem('userData'));
        } catch (err) { }

        if (this.userData == null) {
            return false;
        } else {
            return this.userData.isLogged;
        }
    }

    isCurrentLang(lang: string) {
        // check if the selected lang is current lang
        return lang === this.currentLang;
    }

    selectLang(lang: string) {
        // set current lang;
        if (this.userData == null) {
            this.userData = new TfabricaUserData();
            this.userData.isLogged = false;
        }

        this.currentLang = lang;
        this.userData.language = lang;
        this._changeTranslationsLanguage.next(lang);
    }

    setAppSettings(appSettings: TfabricaSettingsData) {
        this.appSettings = appSettings;
    } 

    public setSelectedVoice(voice) {
        this.selectedVoice = voice;
        localStorage.setItem('selectedVoice', JSON.stringify(this.selectedVoice));
    }

    public returnSelectedVoice() {
        console.log(localStorage.getItem('selectedVoice'));
        return JSON.parse(localStorage.getItem('selectedVoice'));
    }

    public test() {
        console.log("ciao");
    }

}
