import { Observable } from 'rxjs';

import { Component, OnInit, ElementRef } from '@angular/core';
import { ROUTES } from '../sidebar/sidebar.component';
import {Location, LocationStrategy, PathLocationStrategy} from '@angular/common';
import { Router, ActivatedRoute } from '@angular/router';
//import { AuthenticationService } from 'src/app/services/authentication.service';
import { AdminLayoutRoutes } from 'src/app/layouts/admin/admin.routing';
import { AuthService } from '../../../services/auth2.service';

@Component({
  selector: 'app-navbar',
  templateUrl: './navbar.component.html',
  styleUrls: ['./navbar.component.scss']
})
export class NavbarComponent implements OnInit {
    private listTitles: any[];

    private leTitles: any[];

    location: Location;
      mobile_menu_visible: any = 0;
    private toggleButton: any;
    private sidebarVisible: boolean;
    private sidebarMini: boolean;
    constructor(location: Location,  private element: ElementRef, private router: Router, private auth: AuthService, private route: ActivatedRoute) {
      this.location = location;
      this.sidebarVisible = false;
      this.sidebarMini = false;
    }

    ngOnInit(){
      this.listTitles = ROUTES.filter(listTitle => listTitle);
      this.leTitles = AdminLayoutRoutes.filter(listTitle => listTitle);
      const navbar: HTMLElement = this.element.nativeElement;
      this.toggleButton = navbar.getElementsByClassName('navbar-toggler')[0];
      this.router.events.subscribe((event) => {
        this.sidebarClose();
         var $layer: any = document.getElementsByClassName('close-layer')[0];
         if ($layer) {
           $layer.remove();
           this.mobile_menu_visible = 0;
         }
     });
    }

    sidebarMiniOn() {
      const toggleButton = this.toggleButton;
      const body = document.getElementsByTagName('body')[0];
      setTimeout(function(){
        toggleButton.classList.add('sidebar-mini');
      }, 500);
      body.classList.add('sidebar-mini');

      this.sidebarMini = true;
    };

    sidebarMiniOff() {
      const body = document.getElementsByTagName('body')[0];
      //this.toggleButton.classList.remove('');
      this.sidebarMini = false;
      body.classList.remove('sidebar-mini');
    };

    menuToggle(){
      const body = document.getElementsByTagName('body')[0];
      //body.classList.add('sidebar-mini');
      if (this.sidebarMini === false) {
          this.sidebarMiniOn();
      } else {
          this.sidebarMiniOff();
      }
    }

    sidebarOpen() {
      const toggleButton = this.toggleButton;
      const body = document.getElementsByTagName('body')[0];
      setTimeout(function(){
        toggleButton.classList.add('toggled');
      }, 500);

      body.classList.add('nav-open');

      this.sidebarVisible = true;
    };
    sidebarClose() {
      const body = document.getElementsByTagName('body')[0];
      this.toggleButton.classList.remove('toggled');
      this.sidebarVisible = false;
      body.classList.remove('nav-open');
    };
    sidebarToggle() {
      // const toggleButton = this.toggleButton;
      // const body = document.getElementsByTagName('body')[0];
      var $toggle = document.getElementsByClassName('navbar-toggler')[0];

      if (this.sidebarVisible === false) {
          this.sidebarOpen();
      } else {
          this.sidebarClose();
      }
      const body = document.getElementsByTagName('body')[0];

      if (this.mobile_menu_visible == 1) {
          // $('html').removeClass('nav-open');
          body.classList.remove('nav-open');
          if ($layer) {
              $layer.remove();
          }
          setTimeout(function() {
              $toggle.classList.remove('toggled');
          }, 400);

          this.mobile_menu_visible = 0;
      } else {
        setTimeout(function() {
            $toggle.classList.add('toggled');
        }, 430);

        var $layer = document.createElement('div');
        $layer.setAttribute('class', 'close-layer');

        if (body.querySelectorAll('.main-panel')) {
          document.getElementsByClassName('main-panel')[0].appendChild($layer);
        }else if (body.classList.contains('off-canvas-sidebar')) {
          document.getElementsByClassName('wrapper-full-page')[0].appendChild($layer);
        }

        setTimeout(function() {
            $layer.classList.add('visible');
        }, 100);

        $layer.onclick = function() { //asign a function
          body.classList.remove('nav-open');
          this.mobile_menu_visible = 0;
          $layer.classList.remove('visible');
          setTimeout(function() {
            $layer.remove();
            $toggle.classList.remove('toggled');
          }, 400);
        }.bind(this);

        body.classList.add('nav-open');
        this.mobile_menu_visible = 1;
      }
    };

    logout() {
      this.auth.logout().subscribe(success => {
        if (success) {
          window.location.href="";
        }
      });
      //window.location.href="";

      //this.router.navigateByUrl("login");
    }

    getTitle(){
      var titlee = this.location.prepareExternalUrl(this.location.path());
      var component_local = this.router.url;
      var main_title:string;

      if(titlee.charAt(0) === '#'){
        titlee = titlee.slice( 1 );
      }
      var item=0
      while( item < this.leTitles.length){
        
        if("/"+this.leTitles[item].path === titlee){
          main_title = this.leTitles[item].data['title'];
          break;
        }
        item++;
      }
      if (main_title === undefined) {
        return 'Dashboard';
      }
      else {
        return main_title;
      }

    }
}
