import { Injectable } from '@angular/core';
import {
  ActivatedRouteSnapshot,
  CanActivate,
  Router,
  RouterStateSnapshot,
  UrlTree,
} from '@angular/router';
import { Observable } from 'rxjs';
import { USERInterface } from '../interfaces/user-interface';
import { ENCService } from '../services/enc/enc.service';
import { IAMService } from '../services/iam/iam.service';
import * as _sodium from 'libsodium-wrappers';
import { Logger } from 'html2canvas/dist/types/core/logger';

@Injectable({
  providedIn: 'root',
})
export class UserGuard implements CanActivate {
  empresas_arr: any[] = [];

  constructor(
    private _iamService: IAMService,
    private router: Router,
    private _encService: ENCService
  ) {
    this.empresas_arr = [
      {
        RFC: 'TME700618RC7',
        NOMBRE: 'TIMKEN',
      },
    ];
  }

  async canActivate(
    route: ActivatedRouteSnapshot,
    state: RouterStateSnapshot
  ): Promise<boolean> {
    
    let empresas = this.empresas_arr.filter(
      (element) => element.RFC == localStorage.getItem('RFCEMPRESA')
    );
    if (
      localStorage.getItem('TIMUSERENC') != 'undefined' &&
      localStorage.getItem('TIMUSERENC') != '' &&
      localStorage.getItem('TIMUSERENC') != null
    ) {
      

      let usuario: USERInterface = JSON.parse(
        localStorage.getItem('TIMUSERENC')!
      );
      let solicitud_datos = window.location.href.split('?');
      if (empresas.length === 0) {
        if (solicitud_datos[1] != null || solicitud_datos[1] != undefined) {
          let empresa: any = this.empresas_arr.filter(
            (element) => element.NOMBRE == solicitud_datos[1].toUpperCase()
          );
          if (empresa.length > 0) {
            localStorage.setItem('RFCEMPRESA', empresa[0].RFC);
          } else {
            //localStorage.setItem('RFCEMPRESA', 'ITTEC');
          }
        }
      } else {
        solicitud_datos[1] =
          solicitud_datos[1] == undefined ? '' : solicitud_datos[1];
      }

      const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
      await sleep(200);
      
      if (usuario != null) {
        switch (this._encService.desencriptar(usuario.PERFIL)) {
          case 'Administrador':
            if (solicitud_datos[1].includes('/mesmav')) {
              let info_correo = solicitud_datos[1].split('data=')[1];
              this.router.navigate([
                '/admin/mesmav',
                {
                  solicitud_datos: info_correo,
                },
              ]);
            } else {
              this.router.navigate(['/admin/mesmpr']);
            }
            return false;
          case 'Usuario':
            return true;
          default:
            if (solicitud_datos[1].includes('/mesmav')) {
              let info_correo = solicitud_datos[1].split('data=')[1];
              this.router.navigate([
                '/iam',
                {
                  solicitud_datos: info_correo,
                },
              ]);
            } else {
              this.router.navigate(['/iam']);
            }
            return false;
        }
      } else {
        if (solicitud_datos[1].includes('/mesmav')) {
          let info_correo = solicitud_datos[1].split('data=')[1];
          this.router.navigate([
            '/iam',
            {
              solicitud_datos: info_correo,
            },
          ]);
        } else {
          this.router.navigate(['/iam']);
        }

        return false;
      }
    } else {
      this.router.navigate(['/iam']);
      //localStorage.setItem('RFCEMPRESA', 'ITTEC');
      return false;
    }
  }
}
