import { Component, OnInit } from '@angular/core';
import { AnimationController, ModalController,Platform } from '@ionic/angular';
import { SearchPage } from 'src/app/pages/search/search.page';
import { Router } from '@angular/router';
import { LoginUserRespose } from 'src/app/models/user.model';
import { ProfilePage } from 'src/app/modals/profile/profile.page';
import { StorageService } from '../../services/storage.service';
import { SessionStore } from 'src/app/store/session.service';

@Component({
  selector: 'app-header',
  templateUrl: './header.page.html',
  styleUrls: ['./header.page.scss'],
})
export class HeaderPage implements OnInit {

  searchSubject: string = '';
  showSearch = false;
  loggeduser: LoginUserRespose;
  hideSearchBtn: boolean = false;
  notificationdata: any[] = [];
  DataArray: Array<object> = [];
  notificationLength: 0;
  SessionStore = SessionStore

  constructor(
    private router: Router,
    private modalController: ModalController,
    private animationController: AnimationController,
    private storageservice: StorageService,
    private platform: Platform,
  ) {
    this.loggeduser = SessionStore.user;
    router.events.subscribe((val) => {
      this.showSearch = false;
      //this.modalController.dismiss();
    });
  }

  ngOnInit() {
    this.hideSearch();
    if (this.platform.is('desktop') || this.platform.is('mobileweb')) {
      console.log('Notifications not supported')
    } else {
      this.notificationLengthData();
    }
    
    

  }

  async notificationLengthData() {
    this.storageservice.get("Notifications").then((value) => {
      console.log("Init get store", value)

      var data = JSON.parse(value);
      this.notificationLength = data.length;
    })

    await new Promise(resolve => setTimeout(resolve, 10000))
    await this.notificationLengthData()
    console.log('Timer badge count')
  }

  hideSearch() {
    if (this.router.url == '/home/events' || this.router.url == '/home/chat') {
      this.hideSearchBtn = true;
    }
  }

  locationPathname(): string {
    return window.location.pathname
  }

  async openSearch() {

    let classs, showSearchInput, type;
    if (window.innerWidth < 1366) {
      classs = 'modal modal-width-100'
      showSearchInput = true
    } else {
      classs = 'modal modal-desktop desktop-search'
      showSearchInput = false
    }



    if (window.location.pathname.startsWith('/home/agenda')) {
      type = "Agenda"
    } else if (window.location.pathname.startsWith('/home/gabinete-digital')) {
      type = "AccoesPresidenciais & ArquivoDespachoElect"

    } else if (window.location.pathname.startsWith('/home/publications')) {
      type = "AccoesPresidenciais"
    }

    const modal = await this.modalController.create({
      component: SearchPage,
      cssClass: classs,
      componentProps: {
        type: type,
        showSearchInput: showSearchInput,
        select: false
      }
    });
    return await modal.present();
  }

  changeRoute(path) {
    this.router.navigateByUrl(path)
  }


  async openProfile() {

    const enterAnimation = (baseEl: any) => {
      const backdropAnimation = this.animationController.create()
        .addElement(baseEl.querySelector('ion-backdrop')!)
        .fromTo('opacity', '0.01', 'var(--backdrop-opacity)');

      const wrapperAnimation = this.animationController.create()
        .addElement(baseEl.querySelector('.modal-wrapper')!)
        .keyframes([
          { offset: 0, opacity: '1', right: '-100%' },
          { offset: 1, opacity: '1', right: '0px' }
        ]);

      return this.animationController.create()
        .addElement(baseEl)
        .easing('ease-out')
        .duration(500)
        .addAnimation([backdropAnimation, wrapperAnimation]);
    }

    const leaveAnimation = (baseEl: any) => {
      return enterAnimation(baseEl).direction('reverse');
    }


    const modal = await this.modalController.create({
      enterAnimation,
      leaveAnimation,
      component: ProfilePage,
      cssClass: 'model profile-modal search-submodal',
      componentProps: {
      }
    });
    return await modal.present();
  }

  async dynamicSearch() {
    window['dynamicSearch'](this.searchSubject)
  }


  async closeSearch() {
    this.modalController.dismiss()
  }

  /**
  * @description set empty value to searchSubject
  */
  clearSearchInput() {
    this.searchSubject = "";
    window['dynamicSearch'](this.searchSubject)
  }

  async basicSearch() {
    window['searchTriger']()
  }

  profileLabel(text) {
    if (text == 'MDGPR') {
      return 'MD'
    } else if (text == 'PR') {
      return text
    } else {
      return 'UN'
    }
  }
}
