import {Injectable,} from "@angular/core";
import {Subject} from "rxjs/Subject";
import {Observable} from "rxjs/Observable";
import {IDynamicComponent} from "../../models/IDynamicComponent";
import {IDropDownMenuModel} from "../../models/IDropdownMenu";
import {IMenuItem} from "../../models/ITopBar";

@Injectable()
export class CoreBarService
{
    private _dropDownItensStore:Array<IDropDownMenuModel>;
    private _dropDownItemsSubject = new Subject<IDropDownMenuModel[]>();
    DropDownItemsChanged:Observable<IDropDownMenuModel[]> = this._dropDownItemsSubject.asObservable();

    private _leftItensStore:Array<IMenuItem>;
    private _leftItemsSubject = new Subject<IMenuItem[]>();
    LeftItensChanged:Observable<IMenuItem[]> = this._leftItemsSubject.asObservable();

    private _rightItensStore:Array<IMenuItem>;
    private _rightItemsSubject = new Subject<Array<IMenuItem>>();
    RightItensChanged:Observable<IMenuItem[]> = this._rightItemsSubject.asObservable();

    private _TitleSubject = new Subject<string>();
    TitleChanged:Observable<string> = this._TitleSubject.asObservable();


    public contentVisibilityChanged:Subject<boolean> = new Subject<boolean>();
    public nativeVisibilityChanged:Subject<boolean> = new Subject<boolean>();


    private _DynamicContentSubject = new Subject<IDynamicComponent>();
    DynamicContentChanged:Observable<IDynamicComponent> = this._DynamicContentSubject.asObservable();


    private _BarBgVisibilitySubject = new Subject<boolean>();
    public BarBgVisibilityChanged:Observable<boolean> = this._BarBgVisibilitySubject.asObservable();


    constructor()
    {
        this._leftItensStore = [];
        this._rightItensStore = [];
        this._dropDownItensStore = [];
    }

    public addDropdownItem = (newDropdown:IDropDownMenuModel):void=>
    {
        this._dropDownItensStore.push(newDropdown);
        this._dropDownItemsSubject.next(this._dropDownItensStore);
    };

    public addLeftMenuItem = (newItem:IMenuItem):void=>
    {
        this._leftItensStore.push(newItem);
        this._leftItemsSubject.next(this._leftItensStore);
    };

    public clearLeftMenuItens = ():void =>
    {
        this._leftItensStore = [];
        this._leftItemsSubject.next(this._leftItensStore);
    };

    public clearRightMenuItens = ():void =>
    {
        this._rightItensStore = [];
        this._rightItemsSubject.next(this._rightItensStore);
    };

    public clearDropdownItems = ():void =>
    {
        this._dropDownItensStore = [];
        this._dropDownItemsSubject.next(this._dropDownItensStore)
    };

    public addRightMenuItem = (newItem:IMenuItem):void=>
    {
        this._rightItensStore.push(newItem);
        this._rightItemsSubject.next(this._rightItensStore);
    };

    public setNativeVisibility = (v:boolean):void =>
    {
        this.nativeVisibilityChanged.next(v);
    };
    public setContentVisibility = (v:boolean):void =>
    {
        this.contentVisibilityChanged.next(v);
    };


    public setBarBgVisibility = (v:boolean):void =>
    {
        this._BarBgVisibilitySubject.next(v);
    };

    public setTittle = (newTitle:string):void=>
    {
        this._TitleSubject.next(newTitle);
    };

    public loadDynamicComponent = (dynamicContent:IDynamicComponent):void=>
    {
        this._DynamicContentSubject.next(dynamicContent);
    }


}
