import { Component, OnInit,ViewChild } from "@angular/core";
import { Location } from "@angular/common";
import { TranslatorService } from "src/app/hmg-common/services/translator/translator.service";
import { CommonService } from "src/app/hmg-common/services/common/common.service";
import { AuthenticationService } from "src/app/hmg-common/services/authentication/authentication.service";
import { MenuResponse } from "src/app/hmg-common/services/menu/models/menu-response";
import { MyTeamService } from "../service/my-team.service";
import { MenuService } from "src/app/hmg-common/services/menu/menuservice.service";
import { ModalController } from "@ionic/angular";
import { IonInfiniteScroll } from '@ionic/angular';
@Component({
  selector: "app-details",
  templateUrl: "./details.component.html",
  styleUrls: ["./details.component.scss"]
})

export class DetailsComponent implements OnInit {
  public static opendEmployeesARR='opend_employees_arr';
  @ViewChild(IonInfiniteScroll) infiniteScroll: IonInfiniteScroll;
  pageNum: number = 1;
  pageLimit: number = 50;
  modalFlag: any = false;
  empSubordinate: any;
  employee: any;
  IsReachEnd: boolean = false;
  searchKey: any;
  public searchKeySelect: any;
  infiniteRequest: any;
  isSpecialist: boolean = false;
  selMenu: MenuResponse = new MenuResponse();
  public opendEmployees :any=[];
  public headerTitle: string = "";
  constructor(
    public menuService: MenuService,
    public common: CommonService,
    public myTeamService: MyTeamService,
    public ts: TranslatorService,
    public modalController: ModalController,
    private location: Location,
    public authService: AuthenticationService,
  ) {
    console.log("Constuctor called");
  }
  ngOnInit() {
    this.intializeMemberDetail();
  }

  intializeMemberDetail(userID?){
    
    this.pageLimit = 50;
    this.pageNum = 1;
    this.employee = this.common.sharedService.getSharedData(
      MyTeamService.EMPLOYEE_SHARED_DATA,
      false
    );
    let employees = this.common.sharedService.getSharedData( DetailsComponent.opendEmployeesARR, false);
    if( employees ){
      this.opendEmployees.push(this.employee);
      this.common.sharedService.setSharedData(this.opendEmployees, DetailsComponent.opendEmployeesARR);
    }
    //this.opendEmployees = employees;
   
    console.log(this.employee);
    this.selMenu = this.common.sharedService.getSharedData(
      MenuResponse.SHARED_DATA,
      false
    );
     this.headerTitle = this.selMenu.List_Menu.MENU_NAME;
    
     
     this.isSpecialist = this.common.sharedService.getSharedData(
      'isSpecialist',
      false
    ) ? true :false;

    // this.isSpecialist = this.navParams.get("isSpecialist")
    //   ? this.navParams.get("isSpecialist")
    //   : false;

    if (this.employee) this.getEmpSubordinate(userID);
  }


  goback() {
    //this.location.back();
    const user = this.authService.getAuthenticatedUser();
    if(this.employee.SUPERVISOR_NUMBER==user.EMPLOYEE_NUMBER || this.opendEmployees.length == 1){
      this.opendEmployees=[];
      this.common.openMyTeamPage();
    }else{
      for(let i=0;i<this.opendEmployees.length;i++){
      if(this.opendEmployees[i].EMPLOYEE_NUMBER==this.employee.SUPERVISOR_NUMBER){
        this.common.sharedService.setSharedData(
          this.opendEmployees[i],
          MyTeamService.EMPLOYEE_SHARED_DATA
        );
        break;
      }
    }
      this.intializeMemberDetail(this.employee.SUPERVISOR_NUMBER);
    }
  }
  getEmpSubordinate(userID) {
    this.modalFlag = this.employee.isModal;
    let selEmpNo: string = null;
    this.pageNum = 1;
    this.IsReachEnd = false;
    let searchEmpNum = "";
    let searchEmpName = "";
    let searchEmpEmail = "";
    if (this.searchKey) {
      switch (this.searchKeySelect) {
        case "1": {
          searchEmpName = this.searchKey;
          searchEmpNum = "";
          searchEmpEmail = "";

          break;
        }
        case "2": {
          searchEmpNum = this.searchKey;
          searchEmpName = "";
          searchEmpEmail = "";
          break;
        }
        case "3": {
          searchEmpEmail = this.searchKey;
          searchEmpNum = "";
          searchEmpName = "";
          break;
        }
        default: {
          searchEmpNum = "";
          searchEmpName = "";
          searchEmpEmail = "";
          break;
        }
      }
    } else {
      searchEmpNum = "";
      searchEmpName = "";
      searchEmpEmail = "";
    }
    if(userID){
      selEmpNo=userID;
    }else{
    selEmpNo = this.employee.EMPLOYEE_NUMBER;
  }
    const body = {
      P_SELECTED_EMPLOYEE_NUMBER: selEmpNo,
      P_SEARCH_EMPLOYEE_NUMBER: searchEmpNum,
      P_SEARCH_EMPLOYEE_DISPLAY_NAME: searchEmpName,
      P_SEARCH_EMAIL_ADDRESS: searchEmpEmail,
      P_PAGE_NUM: this.pageNum,
      P_PAGE_LIMIT: this.pageLimit
    };
    this.infiniteRequest = body;
    this.myTeamService
      .getEmployeeSubordinates(body)
      .subscribe((result: any) => {
        this.handleEmpResult(result);
      });
  }

  handleEmpResult(result) {
    //let employeeSubordinate=resFlag.GetEmployeeSubordinatesList;
    //this.nav.push("MyTeamPage",{empSubordinate:employeeSubordinate});
    if (this.common.validResponse(result)) {
      if (this.common.hasData(result.GetEmployeeSubordinatesList)) {
        this.empSubordinate = result.GetEmployeeSubordinatesList;
        // this.pageNum++;
        this.infiniteRequest.P_PAGE_NUM= this.pageNum++;
        let lastItemIndex = this.empSubordinate.length - 1;
        if (result.GetEmployeeSubordinatesList[lastItemIndex]) {
          let lastitem = result.GetEmployeeSubordinatesList[lastItemIndex];
          if (lastitem.NO_OF_ROWS == lastitem.ROW_NUM) {
            this.IsReachEnd = true;
          } else {
            this.IsReachEnd = false;
          }
        }
      } else {
        this.empSubordinate = [];
      }
    }
  }
  doInfinite(infiniteScroll) {
    if (!this.IsReachEnd && this.infiniteRequest) {
      // this.infiniteRequest.P_PAGE_NUM = this.pageNum;
      this.myTeamService
        .getEmployeeSubordinates(this.infiniteRequest)
        .subscribe(
          (result: any) => {
            if (this.common.validResponse(result)) {
              this.infiniteRequest.P_PAGE_NUM= this.pageNum++;

              if (this.common.hasData(result.GetEmployeeSubordinatesList)) {
                result.GetEmployeeSubordinatesList.forEach(vr => {
                  if (vr.ROW_NUM == vr.NO_OF_ROWS) {
                    this.IsReachEnd = true;
                  } else {
                    this.IsReachEnd = false;
                  }
                  this.empSubordinate.push(vr);
                  // this.pro.GetVacationRulesList.push(vr);
                });
              } else {
                this.IsReachEnd = true;
              }
            }
            //this.P_PAGE_NUM++;
            if (infiniteScroll) this.infiniteScroll.complete();

            // console.log(resFlag);
          },
          Error => console.log(Error),
          () => this.infiniteScroll.complete()
        );
    } else {
      if (infiniteScroll) this.infiniteScroll.complete();
    }
  }
  getDetails(index) {
    //this.empSubordinate[index].isModal = true;
    this.common.sharedService.setSharedData(
      this.empSubordinate[index],
      MyTeamService.EMPLOYEE_SHARED_DATA
    );
    this.intializeMemberDetail();
   // this.presentModal();
  }
  async presentModal() {
    //this.modalFlag = true;
    const modal = await this.modalController.create({
      component: DetailsComponent,
      keyboardClose: true,
      animated: false
    });
    let dismissed = modal.onDidDismiss();
    dismissed.then(() => {
      this.modalFlag = false;
    });
    return await modal.present();
  }
  getMenuEntries(item) {
    let selEmpNo: String = null;
    let respID: any = -999;
    let menuType: string = "M";
    let nationality: string;
    if (this.isSpecialist == true) {
      // respID = this.sharedData.getSharedData(
      //   MenuResponse.SHARED_SEL_RESP_ID,
      //   true
      // );
      menuType = "S";
    }
    selEmpNo = item.EMPLOYEE_NUMBER;
    nationality = item.NATIONALITY_CODE;

    const body = {
      P_MENU_TYPE: menuType, //to check
      P_SELECTED_EMPLOYEE_NUMBER: selEmpNo,
      P_SELECTED_RESP_ID: respID,
      NationalityCode: nationality
    };
    //set emp and resp id
      this.common.sharedService.setSharedData(selEmpNo, MenuResponse.SHARED_SEL_EMP);
      this.common.sharedService.setSharedData(
      body.P_SELECTED_RESP_ID,
      MenuResponse.SHARED_SEL_RESP_ID
    );
    this.menuService.getMenuEntires(body).subscribe((result: MenuResponse) => {
      this.handleMenuEntiresResult(result);
    });
  }

  private handleMenuEntiresResult(result) {
    if (this.common.validResponse(result)) {
      if (this.common.hasData(result.GetMenuEntriesList)) {
        this.sortMenuEntires(result.GetMenuEntriesList);
      }
    }
  }

  sortMenuEntires(list) {
    this.close().then(() => {
    });
    let tree = this.common.list_to_tree(list);
    this.common.sharedService.setSharedData(tree, "menuEntries");
    // this.common.navigateForward("/eit/homepage");
    this.common.openEITPage();
    // let tree = this.common.list_to_tree(list);
    // this.navCtrl.push("MenuEntriesPage", { menuEntries: tree });
  }

  public async close() {
    const modal = await this.modalController.getTop();
    if (modal) {
      modal.dismiss();
    }
  }
  goToSubordinate() {
    this.selMenu.search=true;
    this.common.sharedService.setSharedData(
      this.selMenu,
      MenuResponse.SHARED_DATA
    );
    
    this.common.openMyTeamPage();
    //this.navCtrl.push("MySubordinatePage", { isSearch: true });
  }
  dismiss() {
    this.modalController.dismiss({
      dismissed: true
    });
  }
}
