import { Component, OnInit, ViewChild, AfterViewInit } from "@angular/core";
import { Platform, Events, MenuController } from "@ionic/angular";
import { TranslatorService } from "./hmg-common/services/translator/translator.service";
import { CommonService } from "./hmg-common/services/common/common.service";
import { AuthenticationService } from "./hmg-common/services/authentication/authentication.service";
import { AuthenticatedUser } from "./hmg-common/services/authentication/models/authenticated-user";
import { TabsBarComponent } from "./hmg-common/ui/tabs-bar/tabs-bar.component";
import { KeyboardService } from "./hmg-common/services/keyboard/keyboard.service";
import { SMSCheckResponse } from "src/app/hmg-common/services/authentication/models/smscheck.response";
import { PushService } from '../../src/app/hmg-common/services/push/push.service';
import { LazyLoadingService } from "./hmg-common/services/lazy-loading/lazy-loading.service";
import { DomSanitizer } from '@angular/platform-browser';

@Component({
  selector: "app-root",
  styleUrls: ["./app.component.scss"],
  templateUrl: "app.component.html"
})
export class AppComponent implements OnInit, AfterViewInit {
  // rootPage:any = LoginPage;
  // @ViewChild(Nav) nav: Nav;
  start: any = false;
  menuList: any = [];
  User_name_Emp: string = "";
  user_image: any = "../assets/imgs/profile.png";
  menuSide: string = "left";
  notBadge: number;
  companyUrl: string = "../assets/imgs/CS.png";
  companyDesc: string = "Powered By Cloud Solutions";
  public direction = "ltr";
  constructor(
    public ts: TranslatorService,
    private cs: CommonService,
    private lazyLoadingService: LazyLoadingService,
    private platform: Platform,
    private events: Events,
    private keyboardService: KeyboardService,
    private menu: MenuController,
    private authService: AuthenticationService,
    private sanitizer: DomSanitizer,
    public pushService: PushService,

  ) {
    this.events.subscribe("img-change", displayImg => {
      console.log("app compont: "+displayImg);
      //this.user_image = "data:image/png;base64"+displayImg;
      this.user_image = this.sanitizer.bypassSecurityTrustUrl("data:Image/*;base64,"+displayImg);

    });

  }
  ngOnInit() {
    this.initializeApp();
  
  }
  ngAfterViewInit() {}
  initializeApp() {
    this.start = false;
    this.lazyLoadingService.monitorLazyLoading(15, true);
    this.platform.ready().then(() => {
      this.ts.loadResources(() => {
        this.initializeDirection();
        // this.statusBar.styleDefault();
        this.start = true;
        this.watchLanguageChangeEvents();
        this.subscribeEvents();
        this.keyboardService.watchKeyboard();
        this.startReceivingPushService();
      });
    });
  }

  private startReceivingPushService() {
    this.pushService.startReceiving();
   
}
  subscribeEvents() {
    this.events.subscribe("setMenu", () => {
      const user = this.authService
        .loadAuthenticatedUser()
        .subscribe((user: AuthenticatedUser) => {
          if (user) {
            this.companyUrl = user.CompanyImageURL
              ? user.CompanyImageURL
              : "../assets/imgs/CS.png";

            this.companyDesc = user.CompanyImageDescription
              ? user.CompanyImageDescription
              : "Powered By Cloud Solutions";
            this.User_name_Emp = user.EMPLOYEE_DISPLAY_NAME;
            this.user_image = user.EMPLOYEE_IMAGE
              ? "data:image/png;base64," + user.EMPLOYEE_IMAGE
              : "../assets/imgs/profile.png";
            console.log(user);
          } else {
            console.log(user);
          }
        });
    });
    this.events.subscribe("getNotCount", badge => {
      this.notBadge = badge;
    });
  }
  private initializeDirection() {
    this.direction = TranslatorService.getCurrentDirection();
  }
  private watchUserLoginChangeEvents() {
    this.events.subscribe(
      AuthenticationService.LOGIN_EVENT,
      (user: AuthenticatedUser, time: Date) => {}
    );
  }
  private watchLanguageChangeEvents() {
    this.events.subscribe(TranslatorService.CHANGE_EVENT, () => {
      this.start = false;
      this.initializeDirection();
      setTimeout(() => {
        this.start = true;
      }, 100);
    });
  }
  logout() {
    this.cs.sharedService.clearAll();
    this.menu.toggle();
    this.cs.openLogin();

  }
  profile() {
    this.cs.openProfile();
    this.menu.toggle();
  }
  openNotification(){

    this.cs.openNotificationPage();
    this.menu.toggle();
  }
  
}
