import { Component, OnInit, ViewChild, ChangeDetectorRef, OnDestroy } from '@angular/core';
import { CommonService } from 'src/app/hmg-common/services/common/common.service';
import { AuthenticationService } from 'src/app/hmg-common/services/authentication/authentication.service';
import { Router } from '@angular/router';
import { AlertController } from '@ionic/angular';
import { TranslatorService } from 'src/app/hmg-common/services/translator/translator.service';
import { CheckUserAuthenticationResponse } from 'src/app/hmg-common/services/authentication/models/check-user-auth.response';
import { SmsReaderService } from 'src/app/hmg-common/services/sms/sms-reader.service';
import { ForgetPassword } from '../models/forget.password';
import { LoginModel } from '../models/LoginModel';
import { SharedDataService } from 'src/app/hmg-common/services/shared-data-service/shared-data.service';
import { LoginComponent } from "src/app/authentication/login/login.component";
@Component({
    selector: 'app-forgot',
    templateUrl: './forgot.component.html',
    styleUrls: ['./forgot.component.scss']
})
export class ForgotComponent implements OnInit {

    private loginData = new LoginModel();
    public P_NEW_PASSWORD: string = '';
    public P_Confirm_NEW_PASSWORD: string = '';
    public P_USER_NAME: string;
    public logo = "assets/icon/login/lock.png";
    public recentPasswordNote = {
        yellowImg: '../assets/imgs/mohemm-action/info.png',
        text: 'Do not user recent password'
    };
    public isLowerCase = {
        blankImg: '../assets/icon/blank.svg',
        greenImg: '../assets/icon/green.svg',
        redImg: '../assets/imgs/close.svg',
        text: 'At least one lowercase',
        isMatch: false
    };
    public isUpperCase = {
        blankImg: '../assets/icon/blank.svg',
        greenImg: '../assets/icon/green.svg',
        redImg: '../assets/imgs/close.svg',
        text: 'At least one uppdercase',
        isMatch: false
    };
    public isHasDigit = {
        blankImg: '../assets/icon/blank.svg',
        greenImg: '../assets/icon/green.svg',
        redImg: '../assets/imgs/close.svg',
        text: 'At least one nomeric',
        isMatch: false
    };
    public isMinLength = {
        blankImg: '../assets/icon/blank.svg',
        greenImg: '../assets/icon/green.svg',
        redImg: '../assets/imgs/close.svg',
        text: 'Minimum 8 characters',
        isMatch: false
    };
    public isRepeatedLetter = {
        blankImg: '../assets/icon/blank.svg',
        greenImg: '../assets/icon/green.svg',
        redImg: '../assets/imgs/close.svg',
        text: 'Do not add repeating letters',
        isMatch: false
    };
    public isContainSpecialChar = {
        blankImg: '../assets/icon/blank.svg',
        greenImg: '../assets/icon/green.svg',
        redImg: '../assets/imgs/close.svg',
        text: 'It should contain special character',
        isMatch: false
    };
    public confirmMatchNew = {
        blankImg: '../assets/icon/blank.svg',
        greenImg: '../assets/icon/green.svg',
        redImg: '../assets/imgs/close.svg',
        text: 'Confirm Password does not match.',
        isMatch: false
    };

    constructor(
        public cs: CommonService,
        public authService: AuthenticationService,
        public router: Router,
        public alertController: AlertController,
        public ts: TranslatorService,
        public smsService: SmsReaderService,
        public changeDetector: ChangeDetectorRef,
        public sharedData: SharedDataService
    ) {
    }

    ngOnInit() { }

    public onForgot() {
        this.sendSMSForForgotPassword();
    }

    private checkUserResult: CheckUserAuthenticationResponse;

    private sendSMSForForgotPassword() {
        const request = new ForgetPassword();
        this.authService.sendForgetPassword(
            request,
            () => {
                this.sendSMSForForgotPassword();
            }, this.ts.trPK('general', 'ok')).subscribe((result: CheckUserAuthenticationResponse) => {
                if (this.cs.validResponse(result)) {
                    this.checkUserResult = result;
                }
            });
    }

    public forgotpassword() {
        const data = this.sharedData.getSharedData(AuthenticationService.LOGIN_DATA, false);
        const forgetPasswordTokenResult = this.sharedData.getSharedData('checkSMSResponse', false);
        let forgetPasswordTokenID = '';
        if (forgetPasswordTokenResult.ForgetPasswordTokenID) {
            forgetPasswordTokenID = forgetPasswordTokenResult.ForgetPasswordTokenID;
        }
        this.loginData.P_USER_NAME = this.P_USER_NAME;
        let request: any = {};
        request.P_Confirm_NEW_PASSWORD = this.P_NEW_PASSWORD;
        request.P_NEW_PASSWORD = this.P_Confirm_NEW_PASSWORD;
        request.P_USER_NAME = data.P_USER_NAME;
        request.ForgetPasswordTokenID = forgetPasswordTokenID;

        this.authService.submitForgetPassword(
            request,
            () => {
                //this.sendSMSForForgotPassword();
            }, this.ts.trPK('general', 'ok')).subscribe((result: CheckUserAuthenticationResponse) => {
                if (this.cs.validResponse(result)) {
                    this.checkUserResult = result;
                    console.log(result);
                    this.cs.toastPK("changePassword", "successChange");
                    this.cs.openLogin();
                }
            });

    }

    checkerFuncation(val) {
        if (this.P_NEW_PASSWORD === '') {
            switch (val) {
                case 1:
                    return this.isLowerCase.blankImg;
                case 2:
                    return this.isUpperCase.blankImg;
                case 3:
                    return this.isHasDigit.blankImg;
                case 4:
                    return this.isMinLength.blankImg;
                case 5:
                    return this.isRepeatedLetter.blankImg;
                case 6:
                    return this.isContainSpecialChar.blankImg;
                case 7:
                    return this.confirmMatchNew.blankImg;
            }
        } else {
            switch (val) {
                case 1:
                    if (/[a-z]/.test(this.P_NEW_PASSWORD)) {
                        this.isLowerCase.isMatch = true;
                        return this.isLowerCase.greenImg;
                    } else {
                        this.isLowerCase.isMatch = false;
                        return this.isLowerCase.redImg;
                    }
                case 2:
                    if (/[A-Z]/.test(this.P_NEW_PASSWORD)) {
                        this.isUpperCase.isMatch = true;
                        return this.isUpperCase.greenImg;
                    } else {
                        this.isUpperCase.isMatch = false;
                        return this.isUpperCase.redImg;
                    }
                case 3:
                    if (/[0-9]/.test(this.P_NEW_PASSWORD)) {
                        this.isHasDigit.isMatch = true;
                        return this.isHasDigit.greenImg;
                    } else {
                        this.isHasDigit.isMatch = false;
                        return this.isHasDigit.redImg;
                    }
                case 4:
                    if (this.P_NEW_PASSWORD.length >= 8) {
                        this.isMinLength.isMatch = true;
                        return this.isMinLength.greenImg;
                    } else {
                        this.isMinLength.isMatch = false;
                        return this.isMinLength.redImg;
                    }
                case 5:
                    if (/([a-z])\1/i.test(this.P_NEW_PASSWORD)) {
                        this.isRepeatedLetter.isMatch = false;
                        return this.isRepeatedLetter.redImg;
                    } else {
                        this.isRepeatedLetter.isMatch = true;
                        return this.isRepeatedLetter.greenImg;
                    }
                case 6:
                    if (/[ `!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?~]/.test(this.P_NEW_PASSWORD)) {
                        this.isContainSpecialChar.isMatch = true;
                        return this.isContainSpecialChar.greenImg;
                    } else {
                        this.isContainSpecialChar.isMatch = false;
                        return this.isContainSpecialChar.redImg;
                    }
                case 7:
                    if (this.P_NEW_PASSWORD !== this.P_Confirm_NEW_PASSWORD) {
                        this.confirmMatchNew.isMatch = false;
                        return this.confirmMatchNew.redImg;
                    } else {
                        this.confirmMatchNew.isMatch = true;
                        return this.confirmMatchNew.greenImg;
                    }
            }
        }
    }

    disabledSubmitBtn() {
        if (this.isLowerCase.isMatch && this.isUpperCase.isMatch && this.isHasDigit.isMatch && this.isMinLength.isMatch
            && this.isRepeatedLetter.isMatch && this.P_NEW_PASSWORD !== '' && this.P_NEW_PASSWORD
            && this.P_Confirm_NEW_PASSWORD && this.isContainSpecialChar && this.confirmMatchNew.isMatch) {
            return false;
        } else { return true; }
    }
}
