import { Component, Inject, OnInit } from '@angular/core';
import { FormControl, FormGroup, Validators } from '@angular/forms';
import {
  MatDialog,
  MatDialogRef,
  MAT_DIALOG_DATA,
} from '@angular/material/dialog';
import { MatSnackBar } from '@angular/material/snack-bar';
import { MCOMAUInterface } from 'src/app/interfaces/mco/mcomau/mcomau-interface';
import { USERInterface } from 'src/app/interfaces/user-interface';
import { ENCService } from 'src/app/services/enc/enc.service';
import { IAMService } from 'src/app/services/iam/iam.service';
import { MCOMAUService } from 'src/app/services/mco/mcomau/mcomau.service';

@Component({
  selector: 'app-mcomor-form',
  templateUrl: './mcomor-form.component.html',
  styleUrls: ['./mcomor-form.component.css'],
})
export class MCOMORFORMComponent implements OnInit {
  usuario_session: USERInterface = JSON.parse(
    localStorage.getItem('TIMUSERENC')!
  );
  formGroup: FormGroup;
  hide = false;
  lastOption: any = null;
  usuarios: any = [];
  usuarios_menos: any = [];

  constructor(
    public dialogRef: MatDialogRef<any>,
    private _iamService: IAMService,
    private _mcomauService: MCOMAUService,
    private _snackBar: MatSnackBar,
    private _encService: ENCService,
    @Inject(MAT_DIALOG_DATA) public data: any
  ) {
    this.usuarios = this.data.usuarios;

    this.usuarios_menos = this.data.usuarios_menos;

    this.formGroup = this.createFormGroup();
  }

  ngOnInit(): void {}

  private createFormGroup() {
    if (this.data.action == 'Registrar') {
      return new FormGroup({
        id_usuario: new FormControl('', Validators.required),
        id_jefe_directo: new FormControl('', Validators.required),
        id_jefe_sustituto: new FormControl(''),
        id_usuario_registra: new FormControl(
          this._encService.desencriptar(this.usuario_session.IDUSUARIO)
        ),
        rfc_empresa: new FormControl(
          this._encService.desencriptar(this.usuario_session.RFCEMPRESA)
        ),
      });
    } else {
      
      let idUsuario = this.obtenerIDUsuario(this.data.item)[0];
      const found_index_usuario = (element: any) =>element.IDUSUARIO == idUsuario;
      let usuario = this.usuarios.findIndex(found_index_usuario);

      let idUsuarioJefeD = this.obtenerIDUsuario(this.data.item)[1];
      const found_index_directo = (element: any) =>element.IDUSUARIO == idUsuarioJefeD;
      let jefeDirecto = this.usuarios_menos.findIndex(found_index_directo);

      let idUsuarioJefeS = this.obtenerIDUsuario(this.data.item)[2];
      const found_index_jefeSustituto = (element: any) =>element.IDUSUARIO == idUsuarioJefeS;
      let jefeSustituto = this.usuarios_menos.findIndex( found_index_jefeSustituto );

      return new FormGroup({
        id_usuario: new FormControl({
          value: this.usuarios[usuario],
          disabled: true,
        }),
        id_jefe_directo: new FormControl(
          this.usuarios_menos[jefeDirecto],
          Validators.required
        ),
        id_jefe_sustituto: new FormControl(this.usuarios_menos[jefeSustituto]),
        id_usuario_aux: new FormControl(this.usuarios[usuario]),
      });
    }
  }

  onSelectionChanged(item: any) {
    if (this.data.action == 'Registrar') {
      this._mcomauService.obtenerMenos(item.IDUSUARIO).subscribe((res: any) => {
        if (res.status == 'Token is Expired') {
          this._iamService.logout();
          this.snackAlert('Sesión expirada. Vuelva a iniciar sesión');
        }else if (!res.status && res.response.length > 0) {
          this.usuarios_menos = res.response;
        }else{
          this.snackAlert( res.response.length > 0 ? res.msg : 'No hay datos para mostrar');
        }
      }, error => {
        if (!error.ok) {
          this.snackAlert('Ocurrió un error inesperado');
        }
        if (error.error.msg != undefined) {
          this.snackAlert(error.error.msg);
        }
        if (error.status == 408) {
          this.snackAlert('Conexion lenta');
        }
      });
    }
  }

  private obtenerIDUsuario(item: any) {
    let arrIDUsuarios = [];

    let arr1 = item.ORGA_IDUS.split('(');
    let IDUsuario1 = arr1[1].split(')');
    arrIDUsuarios.push(IDUsuario1[0]);

    let arr2 = item.ORGA_JEDI.split('(');
    let IDUsuario2 = arr2[1].split(')');
    arrIDUsuarios.push(IDUsuario2[0]);

    if (item.ORGA_JESU != undefined) {
      let arr3 = item.ORGA_JESU.split('(');
      let IDUsuario3 = arr3[1].split(')');
      arrIDUsuarios.push(IDUsuario3[0]);
    }

    return arrIDUsuarios;
  }
  get id_usuario() {
    return this.formGroup.get('id_usuario');
  }

  get id_jefe_directo() {
    return this.formGroup.get('id_jefe_directo');
  }

  get id_jefe_sustituto() {
    return this.formGroup.get('id_jefe_sustituto');
  }

  get id_usuario_registra() {
    return this.formGroup.get('id_usuario_registra');
  }

  get rfc_empresa() {
    return this.formGroup.get('rfc_empresa');
  }

  private snackAlert(mensaje: string) {
    this._snackBar.open(mensaje, 'Cerrar', {
      duration: 4000,
    });
  }
}
