import { Component, Input, OnInit } from '@angular/core';
import { MatIconRegistry } from '@angular/material/icon';
import { DomSanitizer } from '@angular/platform-browser';
import { NavigationEnd, Router } from '@angular/router';
import { AuthService } from '../../auth/services/auth.service';
import { ActividadUser } from '../../modules/Administrador/interfaces/ActividadUser.interface';
import { ActividadService } from '../../modules/Administrador/services/actividad.service';
import { format } from 'date-fns';


@Component({
  selector: 'app-navbar-home',
  templateUrl: './navbar-home.component.html',
  styleUrl: './navbar-home.component.css'
})
export class NavbarHomeComponent implements OnInit {
  public userData: any = JSON.parse(localStorage.getItem('userData') || '');
  public simulado: boolean = false;
  private windowsV: string = '';
  private navegador: string = '';
  private navegadorV: string = '';
  private dispositivo: string = '';

  public route: string = ''; //verifica la ruta
  public role: string = '';//muestra el rol dependiendo el perfil
  public token = localStorage.getItem('token') || '';
  public username: string = '';
  public primerColorBarra: string = ''
  public nombreColegio: string = ''
  public actividad?: ActividadUser;

  public publicIP: string = '';
  public localIP: string = '';

  public fechaEntrada: string = '';


  @Input() name: any; //recibe el nombre del colegio de la api
  @Input() logo: any; //recibe la imagen del logo de la api
  @Input() firstColorBar: any; //recibe el color de fondo de la api
  @Input() secondColorBar: any; //recibe el segundo color de fondo de la api(opcional)
  @Input() textureBar: any; //recibe el url de la textura de fondo de la api(opcional)
  @Input() fontColorBar: any; //recibe el color de letra de la api(opcional)

  constructor(
    private iconRegistry: MatIconRegistry,
    private sanitizer: DomSanitizer,
    private _router: Router,
    private authService: AuthService,
    private actividadService: ActividadService
  ) {



    this.iconRegistry.addSvgIcon('ajustes', sanitizer.bypassSecurityTrustResourceUrl('assets/icons/ajustes.svg'))
    this.route = this._router.url;
    // this.isTokenExpired(this.token);
    this.authService;

    if (!localStorage.getItem('fechaE')) {
      const fechaActual = new Date();
      this.fechaEntrada = format(fechaActual, 'yyyy-MM-dd HH:mm:ss');
      localStorage.setItem('fechaE', this.fechaEntrada)
      console.log(this.fechaEntrada);
    }

    var userAgent = navigator.userAgent;
    if (/Mobile|iP(hone|od|ad)|Android|BlackBerry|IEMobile/.test(userAgent)) {
      this.dispositivo = 'Mobile Phone';
    } else {
      this.dispositivo = 'Desktop';
    }

    // ------------------------------------------------------------------------

    // obtener versión del navegador
    var getBrowserInfo = function () {
      var ua = navigator.userAgent, tem,
        M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
      if (/trident/i.test(M[1])) {
        tem = /\brv[ :]+(\d+)/g.exec(ua) || [];
        return 'IE ' + (tem[1] || '');
      }
      if (M[1] === 'Chrome') {
        tem = ua.match(/\b(OPR|Edge)\/(\d+)/);
        if (tem != null) return tem.slice(1).join(' ').replace('OPR', 'Opera');
      }
      M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];
      if ((tem = ua.match(/version\/(\d+)/i)) != null) M.splice(1, 1, tem[1]);
      return M.join(' ');
    };
    this.navegador = getBrowserInfo().split(' ')[0]
    this.navegadorV = getBrowserInfo().split(' ')[1]


    var userAgent = window.navigator.userAgent;

    // Verificar si el usuario está utilizando Windows
    if (userAgent.indexOf("Windows") != -1) {
      // Definir los patrones para buscar versiones específicas de Windows
      var windowsVersions: any = {
        "Win11": "Windows NT 10.0",
        "Win10": "Windows NT 10.0",
        "Win8.1": "Windows NT 6.3",
        "Win8": "Windows NT 6.2",
        "Win7": "Windows NT 6.1",
        "WinVista": "Windows NT 6.0",
        "WinXP": "Windows NT 5.1",
        "Win2000": "Windows NT 5.0"
      };

      // Iterar sobre los patrones para detectar la versión específica
      for (var version in windowsVersions) {
        if (userAgent.indexOf(windowsVersions[version]) != -1) {

          this.windowsV = version;
          break;
        }
      }
    } else {
      console.log("No se detectó Windows en el userAgent.");
    }

    if (localStorage.getItem('userDataS')) {
      this.simulado = true;
    }


    // ------------------------------------------------------------------------


  }


  ngOnInit(): void {
    this.checkUrl()
    this._router.events.subscribe((event) => {
      if (event instanceof NavigationEnd) {
        this.route = event.url;
      }
    });

    // setTimeout(() => {
    //   this.actividad = {
    //     idUsuario: this.userData[0],
    //     fechaHora: localStorage.getItem('fechaE') || '',
    //     ipPublica: this.publicIP,
    //     ipLocal: this.localIP,
    //     plataforma: this.windowsV,
    //     navegador: this.navegador,
    //     version: this.navegadorV,
    //     tipoDispositivo: this.dispositivo,
    //     esMovil: this.dispositivo === 'MobilePhone' ? '1' : '',
    //     esTableta: '',
    //     esApp: 'No',
    //     sesionCerrada: '',
    //     sesionMensual: '',
    //     fechaHoraFin: ''
    //   };
    //   console.log(this.actividad);
    // }, 2000);

  }

  cerrar() {
    localStorage.removeItem('userDataS');
    window.close();
  }

  actualizarActividad() {
    this.actividad = {
      idUsuario: this.userData[0],
      fechaHora: localStorage.getItem('fechaE') || '',
      ipPublica: this.publicIP,
      ipLocal: this.localIP,
      plataforma: this.windowsV,
      navegador: this.navegador,
      version: this.navegadorV,
      tipoDispositivo: this.dispositivo,
      esMovil: this.dispositivo === 'Mobile Phone' ? '1' : ' 0',
      esTableta: '0',
      esApp: 'No',
      sesionCerrada: '',
      sesionMensual: '',
      fechaHoraFin: format(new Date(), 'yyyy-MM-dd HH:mm:ss')
    };

    console.log(this.actividad);
    return this.actividadService.storeActivity(this.actividad).subscribe((response) => {
      console.log(response);
    }, (err) => {
      console.log(err);
    });
  }


  logout() {
    this.authService.logout().subscribe((response) => {
      localStorage.clear();
      this._router.navigate(['']);
    },
      (err) => {
      }
    );
  }

  checkUrl() {
    switch (this.route.split('/')[1]) {
      case "homeAdmin":
        this.role = 'Administrador'
        this.userData = JSON.parse(localStorage.getItem('userData') || '');
        this.simulado = false;
        break;
      case "homePadres":
        this.role = 'Padre de Familia'
        this.userData = JSON.parse(localStorage.getItem('userDataS') ? localStorage.getItem('userDataS') || '' : localStorage.getItem('userData') || '');
        this.simulado = localStorage.getItem('userDataS') ? true : false;
        break;
      case "homeAlumno":
        this.role = 'Alumno'
        this.userData = JSON.parse(localStorage.getItem('userDataS') ? localStorage.getItem('userDataS') || '' : localStorage.getItem('userData') || '');
        this.simulado = localStorage.getItem('userDataS') ? true : false;
        break;
      case "homeProfe":
        this.role = 'Profesor'
        this.userData = JSON.parse(localStorage.getItem('userDataS') ? localStorage.getItem('userDataS') || '' : localStorage.getItem('userData') || '');
        this.simulado = localStorage.getItem('userDataS') ? true : false;
        break;
      default:
        this.role = ''
        break;
    }
    return this.role;
  }


}


