Source: vistas/vistaempresas.js

import { Vista } from './vista.js';

/**
 * VistaEmpresas: Vista correspondiente al listado de empresas de la aplicación DualEx.
 * Permite listar las empresas, añadir una nueva empresa, editar y borrar empresas existentes.
 */
export class VistaEmpresas extends Vista {
  /**
   * Constructor de la clase.
   * @param {Object} controlador - Controlador de la vista principal.
   * @param {Node} base - Nodo al que se añadirá la vista principal.
   */
  constructor(controlador, base) {
    super(controlador);
    this.base = base;
  }

  /**
   * Método cargarEmpresas: Carga y muestra la lista de empresas en la interfaz de usuario.
   */
  cargarEmpresas() {
    // Eliminar cualquier contenido previo en la base
    this.eliminarHijos(this.base);

    // Llamar a la función del controlador para mostrar las empresas
    this.controlador.mostrarEmpresas()
      .then(empresas => {
        // Si no hay empresas, mostramos un mensaje
        if (!empresas || empresas.length === 0) {
          this.base.appendChild(document.createTextNode('No hay empresas.'));
          return;
        }

        

        // Agregar cada empresa como un elemento de div
        empresas.forEach(empresa => {
          const itemEmpresa = document.createElement('div');
          itemEmpresa.classList.add('empresa-item');
          
          const empresaInfo = document.createElement('div');
          empresaInfo.classList.add('empresa-info');
          empresaInfo.addEventListener('click', () => {
            this.handleClickEditar(empresa.id);
          });
          /*const idSpan = document.createElement('span');
          const idStrong = document.createElement('strong');
          idStrong.textContent = 'ID: ';
          idSpan.appendChild(idStrong);
          idSpan.appendChild(document.createTextNode(empresa.id));
          empresaInfo.appendChild(idSpan);*/
        
          const siglasSpan = document.createElement('span');
          //const siglasStrong = document.createElement('strong');
          //siglasStrong.textContent = 'Siglas: ';
          //siglasSpan.appendChild(siglasStrong);
          siglasSpan.appendChild(document.createTextNode(empresa.siglas));
          empresaInfo.appendChild(siglasSpan);
        
          const nombreSpan = document.createElement('span');
          //const nombreStrong = document.createElement('strong');
          //nombreStrong.textContent = 'Nombre: ';
          //nombreSpan.appendChild(nombreStrong);
          nombreSpan.appendChild(document.createTextNode(empresa.nombre));
          empresaInfo.appendChild(nombreSpan);
        
          const notasSpan = document.createElement('span');
          //const notasStrong = document.createElement('strong');
          //notasStrong.textContent = 'Notas: ';
          //notasSpan.appendChild(notasStrong);
          empresaInfo.appendChild(document.createElement('br'))
          notasSpan.appendChild(document.createTextNode(empresa.notas));
          empresaInfo.appendChild(notasSpan);
        
          itemEmpresa.appendChild(empresaInfo);
        
          const iconosDiv = document.createElement('div');
          iconosDiv.classList.add('iconos');
        
          const editarImg = document.createElement('img');
          editarImg.src = "./iconos/edit.svg";
          editarImg.classList.add('icono', 'editar');
          editarImg.alt = "Editar";
          editarImg.addEventListener('click', () => {
            this.handleClickEditar(empresa.id);
          });
          iconosDiv.appendChild(editarImg);
        
          const borrarImg = document.createElement('img');
          borrarImg.src = "./iconos/delete.svg";
          borrarImg.classList.add('icono', 'borrar');
          borrarImg.alt = "Borrar";
          borrarImg.addEventListener('click', () => {
            this.handleClickBorrar(empresa.id);
          });
          iconosDiv.appendChild(borrarImg);
        
          itemEmpresa.appendChild(iconosDiv);
        
          divEmpresas.appendChild(itemEmpresa);
        });
      })
      .catch(error => {
        // Manejar errores en caso de que la promesa sea rechazada
        console.error('Error al cargar empresas:', error);
        this.base.appendChild(document.createTextNode('Error al cargar empresas.'));
      });
  }

  /**
   * Método handleClickEditar: Maneja el evento de clic en el botón de editar una empresa.
   * @param {string} id - ID de la empresa a editar.
   */
  handleClickEditar(id) {
    // Lógica para editar la empresa asociada a este botón
    this.controlador.ocultarVistas();
    this.controlador.mostrarDatosEmpresa(id).then(empresa => {
      // Mostrar los datos de la empresa en el formulario de edición
      this.controlador.vistaEditarEmpresa.mostrarEmpresaEnFormulario(empresa);
      // Mostrar la vista de edición de empresa
      this.controlador.vistaEditarEmpresa.mostrar(true);
    })
    .catch(error => {
      console.error('Error al obtener datos de empresa:', error);
    });
  }

  /**
   * Método handleClickBorrar: Maneja el evento de clic en el botón de borrar una empresa.
   * @param {string} id - ID de la empresa a borrar.
   */
  handleClickBorrar(id) {
    // Mostrar un cuadro de confirmación
    const titulo = 'Confirmar borrado';
    const mensaje = '¿Realmente desea borrar esta empresa?';              
    // Si el usuario confirma, proceder con las acciones de borrado
    this.controlador.vistaDialogo.abrir(titulo, mensaje, (confirmacion) => {
      if (confirmacion) {
        // Si el usuario confirma, proceder con las acciones de borrado
        this.controlador.borrarEmpresa(id).then(() => {
          this.controlador.ocultarVistas();
          this.controlador.vistaEmpresas.mostrar(true)
        });
      }
    });
  }
}