import { Component, OnInit, OnDestroy } from '@angular/core';
import { MostrarOcultarService } from '../../../../../services/mostrar-ocultar.service';
import { Router } from '@angular/router';
import { Parametros } from '../../../../../Models/conf-parametros';
import { ParametrosService } from '../../../../../services/conf-parametros/parametros.service';
import { format } from 'date-fns';
import { Usuario } from 'src/app/modules/main/Models/usuario';
import { UsuariosService } from 'src/app/modules/main/services/usuarios/usuarios.service';
import { ConfirmacionEliminacionComponent } from '../../../../programa/opciones/ConfirmacionEliminacion/ConfirmacionEliminacion.component';
import { MatDialog } from '@angular/material/dialog';
import { Observable } from 'rxjs';

@Component({
  selector: 'app-conf-parametros-eva',
  templateUrl: './conf-parametros-eva.component.html',
  styleUrls: ['./conf-parametros-eva.component.css']
})
export class ConfParametrosEvaComponent implements OnInit {

  terminoBusqueda: string = '';
  tipo: number
  parametros!: Parametros[];

  constructor(
    public mostrarOcultarService: MostrarOcultarService,
    private router: Router,
    private parametrosService: ParametrosService,
    private dialog: MatDialog,
  ) {
    this.tipo = 1;

  }

  mostrarDiv: boolean[] = [];

  toggleDiv(i: number) {
    this.mostrarDiv[i] = !this.mostrarDiv[i];
  }

  AgregarParametro() {
    this.router.navigate(['main/nuevaConf'], { queryParams: { tipo: this.tipo.toString() } });
  }

  volver() {
    this.router.navigate(['main/configuraciones']);
  }

  EditarParametro(id: number) {
    const registroSeleccionado = this.parametros.find(parametro => parametro.uzytavconparaeva_id === id);
    this.mostrarOcultarService.parametroEditado = registroSeleccionado;
    this.router.navigate(['main/editarConf', id]);

  }

  obtenerRegistros() {
    this.parametrosService.obtenerParametrosInicial().subscribe(data => {
      this.parametros = data.map(parametro => {
        parametro.uzytavconparaeva_fecha_c = new Date(parametro.uzytavconparaeva_fecha_c);
        return parametro;
      });
      this.buscarParametros(); // Realizar búsqueda inicial

    });

  }


  // Código para el buscar

  eliminarParametro(id: number) {
    this.openModalDelete('¿Desea Eliminar el Registro?').subscribe(result =>{
      if (result === 'confirm') {
        this.parametrosService.eliminarParametros(id).subscribe(
          () => {
            console.log('Registro eliminado correctamente');
            this.obtenerRegistros();
          },
          (error) => {
            console.error('Error al eliminar el registro', error);
          }
        );
      }
    });
  }

  openModalDelete(mensaje: string): Observable<string>{
    const dialogRef = this.dialog.open(ConfirmacionEliminacionComponent, {
      disableClose: true,
      data: { mensaje: mensaje }
    });

    return dialogRef.afterClosed();
  }

  buscarParametros() {
    const termino = this.terminoBusqueda.trim().toLowerCase();

    if (termino === '') {
      this.mostrarTodosLosRegistros();
    } else {
      this.filtrarRegistros(termino);

    }

  }

  mostrarTodosLosRegistros() {
    this.parametros.forEach((parametro, i) => {
      const fila = document.getElementById('fila-' + i);
      if (fila) {
        fila.style.display = 'table-row';
      }
    });
  }


  // formatFecha(parametro.uzytavconparaeva_fecha_c) //
  filtrarRegistros(termino: string) {
    this.parametros.forEach((parametro, i) => {
      const descripcion = parametro.uzytavconparaeva_descrip.toLowerCase();
      const puminire = parametro.uzytavconparaeva_puminire.toString().toLowerCase();
      const fecha = this.formatFecha(parametro.uzytavconparaeva_fecha_c).toLowerCase();

      const filaCoincide = descripcion.includes(termino)
        || puminire.includes(termino) || fecha.includes(termino);
      const fila = document.getElementById('fila-' + i);

      if (fila) {
        if (filaCoincide) {
          fila.style.display = 'table-row';
        } else {
          fila.style.display = 'none';
        }
      }
    });
  }

  formatFecha(fecha: Date): string {
    return format(fecha, 'dd-MM-yyyy');
  }

  ngOnInit() {
    this.obtenerRegistros();
  }



}