import { Component, OnInit } from '@angular/core';

import {ButtonSettings} from "src/app/hmg-common/ui/button/models/button-settingsl";

import {TranslatorService} from "src/app/hmg-common/services/translator/translator.service";

import { CommonService } from 'src/app/hmg-common/services/common/common.service';

import { LoginRequest } from 'src/app/hmg-common/services/authentication/models/login.request';

import { AuthenticationService } from 'src/app/hmg-common/services/authentication/authentication.service';

import { SharedDataService } from 'src/app/hmg-common/services/shared-data-service/shared-data.service';

import { SendActivationByType } from '../models/sendActivationByType';

import { FingerprintAIO } from '@ionic-native/fingerprint-aio/ngx';

import { GetLoginInfoRequest } from "../../hmg-common/services/authentication/models/get-login-info.request";

import { GetLoginInfoResponse } from "../../hmg-common/services/authentication/models/get-login-info.response";

import { SMSCheckRequest } from "src/app/hmg-common/services/authentication/models/smscheck.request";

import { SMSCheckResponse } from "src/app/hmg-common/services/authentication/models/smscheck.response";

import { PushService } from 'src/app/hmg-common/services/push/push.service';

import { Platform } from '@ionic/angular';





@Component({

  selector: 'app-confirm-login',

  templateUrl: './confirm-login.component.html',

  styleUrls: ['./confirm-login.component.scss'],

})

export class ConfirmLoginComponent implements OnInit {

 public logo = "assets/imgs/CS.png";

 public buttons:any=[];

 isFaceorFinger: any;

 onlySMSBox: any = true;

 loginData:any;

 selectedOption: any;

 lastLogin: any;

 loginTokenID:any

 deviceToken:any;



  constructor(    

    public ts: TranslatorService,

    public cs: CommonService,

    public authService: AuthenticationService,

    public sharedData: SharedDataService,

    private faio: FingerprintAIO,

    public pushService: PushService,

    public platform: Platform,







    ) {

     this.loginData= this.sharedData.getSharedData(AuthenticationService.LOGIN_DATA, false);

     console.log(this.loginData);

    this.deviceToken= this.cs.sharedService.getSharedData(AuthenticationService.DEVICE_TOKEN, false);

    console.log("deviceToken :"+this.deviceToken);

    //if device token undefind

    if(this.deviceToken == undefined){

      this.deviceToken = localStorage.getItem("deviceToken");



    }

    this.lastLogin = this.cs.sharedService.getSharedData(AuthenticationService.LAST_LOGIN, false);



    }



  ngOnInit() {

   //**checkIfAvailable FAIO **//

    this.checkIfAvailable();

    //**getSharedData of IMEI_USER_DATA and REGISTER_DATA_FOR_LOGIIN to set defult value **//

   

   // this.setDefault();





   this.button();

  }



  checkIfAvailable() {

    this.faio.isAvailable().then(

      options => {

        this.isFaceorFinger = options;

        // && this.lastLogin === 1

        // if (this.isFaceorFinger === 'finger' || this.isFaceorFinger === 'biometric') {

        //   this.selectedOption = 2;

        //   this.cs.presentConfirmDialog(

        //     this.ts.trPK("login", "biometric-support"),

        //     () => {

        //       this.presentBiometricDialog();

        //       this.cs.sharedService.setSharedData(

        //         this.selectedOption,

        //         AuthenticationService.LAST_LOGIN

        //       );

        //     },

        //     () => { }

        //   );

        // }

        this.button();

      },

      () => {

        this.isFaceorFinger = null;

        this.button();

      }

    );

  }



  button() {

    console.log("button");



    this.buttons = [

      [{

        title: "login,verify-with-fingerprint",

        url: null,

        icon: "assets/icon/login/102.png",

        settings: new ButtonSettings(true, true, true, true),

        value: 2,

        disabled: this.isFaceorFinger === "finger" || this.isFaceorFinger === "biometric" ? false : true,

        visible: this.onlySMSBox

      },

      {

        title: "login,verify-with-faceid",

        url: null,

        icon: "assets/icon/login/101.png",

        settings: new ButtonSettings(true, true, true, true),

        value: 3,

        disabled: this.isFaceorFinger === "face"  ? false : true,

        visible: this.onlySMSBox

      },

      {

        title: "login,verify-with-whatsapp",

        url: null,

        icon: "assets/icon/login/104.png",

        settings: new ButtonSettings(true, true, true, true),

        value: 4,

        visible: true

      },

      {

        title: "login,verify-with-sms",

        url: null,

        icon: "assets/icon/login/103.png",

        settings: new ButtonSettings(true, true, true, true),

        value: 1,

        visible: true

      }

      ]

    ];

  }



  confirm(el: any) {

    console.log("confirm:"+ el );

     this.selectedOption = this.selectedOption && !this.onlySMSBox ? this.selectedOption : el.value;

    switch (el.value) {

      case 1:

        console.log(el.value);

      this.loginWithSMS(el);

        break;

      case 2:

          console.log(el.value);



        this.loginWithFingurePrint(el);

        break;

      case 3:

          console.log(el.value);



        this.faceReconization(el);

        break;

      case 4:

          console.log(el.value);



        this.loginWithWhatsapp(el);

        break;

      default:

        break;

    }

    this.cs.sharedService.setSharedData(

      this.selectedOption,

      AuthenticationService.LAST_LOGIN

    );

  }



  loginWithSMS(el) {

    console.log("loginWithSMS: "+ el);



    if (!el.disabled) {



     // if (this.user && !this.registerd_data) {

        //calling because i dont have token id which required to the send activation code

      ///  this.checkUserAuthentication(1);

     //  this.checkUserAuthentication(); ***



    //  } else {

        if (this.loginData.LogInTokenID) {

          this.sendActivationCode(1);

        } else {

        //  this.checkUserAuthentication(1);

         // this.checkUserAuthentication();**



        }

     // }

    }

  }



  loginWithWhatsapp(el) {

    if (!el.disabled) {

    //  if (this.user && !this.registerd_data) {

        //calling because i dont have token id which required to the send activation code

     //   this.checkUserAuthentication(2);

     // } else {

        if (this.loginData.LogInTokenID) {

          this.sendActivationCode(2);

        } else {

         // this.checkUserAuthentication(2);

        }

     // }

    }

  }



 public sendActivationCode(type: number) {

    let request = new SendActivationByType();

    this.authService.setPublicFields(request);

    request.OTP_SendType = type;

    request.MobileNumber = this.loginData.MobileNumber;

    request.IsMobileFingerPrint =0;

    request.P_USER_NAME=this.loginData.P_USER_NAME;

    request.LogInTokenID =this.loginData.LogInTokenID;

    request.P_LEGISLATION_CODE ="SA";

    // request.VersionID ="2.0";



 



   // request.LanguageID = imeiData && imeiData.PreferredLanguage || request.LanguageID;

    this.authService

      .sendActivationCodeByType(

        request,

        () => { },

        this.ts.trPK("general", "ok")

      )

      .subscribe((result: any) => {

        if (result.isSMSSent) {

          this.cs.sharedService.setSharedData({

            MobileNumber: this.loginData.mobileNumber,

            loginType: this.selectedOption

          },

          SMSCheckRequest.SHARED_DATA

          );



          this.cs.openSMSPage();

                }

      });

  }



  loginWithFingurePrint(el: any) {

    if (!el.disabled) {

      this.startBiometricLoginIfAvailable();

    }

  }

  faceReconization(el: any) {

    if (!el.disabled) {

      this.startBiometricLoginIfAvailable();

    }

  }



  private startBiometricLoginIfAvailable() {

    // this.setting.isBiometricsEnabled().then(result => {

    // console.log(result);

    this.faio.isAvailable().then(

      options => {

        // if biometric supported

        //if (result) {

        // ask if login with face or finger

        this.presentBiometricDialog();

        // } else {

        //   //ask to enable biometric

        //   this.getPermissionToActivateBiometric();

        // }

      },

      () => {

        alert("not avaliable ")

        // if biometric not  supported do nothing unless

        // user session time out from last login

        // if (AuthenticationService.isRequireRelogin()) {

        //   this.initializeInputsFromSessionTimeOut(user);

        // }

        //  this.hideSplashScreen(true);

      }

    );

    //});

  }



  private presentBiometricDialog() {

    this.faio

      .show({





       title: 'Biometric Authetnciation', // (Android Only) | optional | Default: "<APP_NAME> Biometric Sign On"

         subtitle: 'Coolest Plugin ever' ,// (Android Only) | optional | Default: null

        description: this.ts.trPK("general", "auth-please"),// optional | Default: null

        fallbackButtonTitle: this.ts.trPK("general", "use-pin"), // optional | When disableBackup is false defaults to "Use Pin".

                                   // When disableBackup is true defaults to "Cancel"

        disableBackup:true,  // optional | default: false

     



        // clientId: "Fingerprint Authetnciation",

        // clientSecret: "Ate343_9347lajF", // Only necessary for Android

        // disableBackup: true, // Only for Android(optional)

        // localizedFallbackTitle: this.ts.trPK("general", "use-pin"), // Only for iOS

        // localizedReason: this.ts.trPK("general", "auth-please") // Only for iOS

      })

      .then((result: any) => {

        console.log("1");

        // this.deviceToken= this.cs.sharedService.getSharedData(AuthenticationService.DEVICE_TOKEN, false);

        let request = new GetLoginInfoRequest();

        this.authService.setPublicFields(request);

        request.MobileNumber = this.loginData.MobileNumber;

        request.P_USER_NAME=this.loginData.P_USER_NAME;

        request.UserName=this.loginData.P_USER_NAME;

        request.LogInTokenID =this.loginData.LogInTokenID;

        request.CompanyID =1;//cs=1 , HMG=2

        request.DeviceType= this.cs.getDeviceType();

        request.DeviceToken=this.deviceToken;



        this.getMobileInfo(request);

      })

      .catch((error: any) => {

        console.log(error);

      });

  }



  private getMobileInfo(request: GetLoginInfoRequest) {

    console.log("2");



    this.authService.getLoginInfo(request,() => { },this.ts.trPK("general", "ok")).subscribe((result: GetLoginInfoResponse) => {

        console.log("authService.getLoginInfo");

       if(result.Mohemm_GetPatientID_List.length > 0){

        if ( result.Mohemm_GetPatientID_List[0].LoginType == 2 || result.Mohemm_GetPatientID_List[0].LoginType == 3) {

          this.loginTokenID = result.LogInTokenID;

          this.checkSMS();

        } else {

  

            this.onlySMSBox = false;

            this.button();

        }

      }else {

          this.onlySMSBox = false;

          this.button();

    

         }

      });

  }



  public checkSMS() {

    const data = this.sharedData.getSharedData(AuthenticationService.LOGIN_DATA, false);

    const request = new SMSCheckRequest();



    request.LogInTokenID = data.LogInTokenID;

    request.activationCode = "";

    request.P_USER_NAME = data.P_USER_NAME;

    request.MobileNumber = data.MobileNumber;



    this.authService

      .checkSMS(request, () => {}, this.ts.trPK("general", "ok"))

      .subscribe((result: SMSCheckResponse) => {

        console.log(result);

        if (this.cs.validResponse(result)) {

          AuthenticationService.servicePrivilage=result.Privilege_List;

          this.authService.setAuthenticatedUser(result).subscribe(() => {
            console.log("insert");

            if (this.platform.is("cordova")) {

              this.insertMobileLogin();

            }            

            this.cs.openHome();

          });

        }

      });

  }





  public insertMobileLogin(){

    let request = new GetLoginInfoRequest();

   this.authService.setPublicFields(request);

   request.MobileNumber = this.loginData.MobileNumber;

   request.P_USER_NAME=this.loginData.P_USER_NAME;

   request.UserName=this.loginData.P_USER_NAME;

   request.LogInTokenID =this.loginData.LogInTokenID;

   request.CompanyID =1;//CompanyID

   request.DeviceType= this.cs.getDeviceType();

   request.DeviceToken=this.deviceToken;

   //request.TokenID=

   request.LoginType=this.selectedOption;



   this.authService

 .insertMobileLoginInfo(

   request,

   () => { },

   this.ts.trPK("general", "ok")

 )

 .subscribe((result: any) => {

  console.log(result);



console.log("succssful insertMobileLoginInfo" );

 });



}



}​