/**
 * Función para mostrar la modal de editar el empleado
 */
async function editarEmpleado(idEmpleado) {
  try {
    // Ocultar la modal si está abierta
    const existingModal = document.getElementById("editarEmpleadoModal");
    if (existingModal) {
      const modal = bootstrap.Modal.getInstance(existingModal);
      if (modal) {
        modal.hide();
      }
      existingModal.remove(); // Eliminar la modal existente
    }

    const response = await fetch("modales/modalEditar.php");
    if (!response.ok) {
      throw new Error("Error al cargar la modal de editar el empleado");
    }
    const modalHTML = await response.text();

    // Crear un elemento div para almacenar el contenido de la modal
    const modalContainer = document.createElement("div");
    modalContainer.innerHTML = modalHTML;

    // Agregar la modal al documento actual
    document.body.appendChild(modalContainer);

    // Mostrar la modal
    const myModal = new bootstrap.Modal(modalContainer.querySelector("#editarEmpleadoModal"));
    myModal.show();

    await cargarDatosEmpleadoEditar(idEmpleado);
  } catch (error) {
    console.error(error);
  }
}

/**
 * Función para cargar la información del empleado seleccionado en la modal de edición.
 */
async function cargarDatosEmpleadoEditar(idEmpleado) {
  try {
    const response = await axios.get(`acciones_evaluador/detallesEmpleado.php?id=${idEmpleado}`);
    
    if (response.status === 200) {
      const { id, nombre, edad, cedula, sexo, telefono, tipousuario, usuario, correo, cant_trabajos, contrasena, Idioma, areas, activo, avatar } = response.data;
      console.log(id, nombre, edad, cedula, sexo, telefono, tipousuario, usuario, correo, cant_trabajos, contrasena, Idioma, areas, activo, avatar);

      // Asignar los valores del formulario de edición
      document.querySelector("#idempleado").value = id;
      document.querySelector("#nombre").value = nombre;
      document.querySelector("#edad").value = edad;
      document.querySelector("#cedula").value = cedula;
      document.querySelector("#telefono").value = telefono;
      document.querySelector("#correo").value = correo;
      document.querySelector("#cant_trabajos").value = cant_trabajos;
      document.querySelector("#usuario").value = usuario;
      document.querySelector("#contrasena").value = contrasena;

      // Seleccionar el estado (activo/inactivo)
      const activoField = document.querySelector(`input[name="activo"][value="${activo}"]`);
      if (activoField) activoField.checked = true;

      // Seleccionar el sexo
      seleccionarSexo(sexo);

      // Seleccionar el tipo de usuario
      seleccionarTipoUsuario(tipousuario);

      // Seleccionar el idioma
      seleccionarIdioma(Idioma);

      // Seleccionar las áreas
      seleccionarAreas(areas);

      // Asignar la imagen del avatar
      const elementAvatar = document.querySelector("#avatar");
      elementAvatar.src = avatar ? `acciones_evaluador/fotos_empleados/${avatar}` : "assets/imgs/sin-foto.jpg";
      
    } else {
      console.log("Error al cargar el empleado a editar");
    }
  } catch (error) {
    console.error("Error al cargar los detalles del empleado", error);
  }
}

/**
 * Función para seleccionar el sexo del empleado de acuerdo al sexo actual
 */
function seleccionarSexo(sexoEmpleado) {
  const radioMasculino = document.querySelector("#sexo_m");
  const radioFemenino = document.querySelector("#sexo_f");

  if (sexoEmpleado === "Masculino") {
    radioMasculino.checked = true;
  } else if (sexoEmpleado === "Femenino") {
    radioFemenino.checked = true;
  }
}

/**
 * Función para seleccionar el tipo de usuario del empleado de acuerdo al tipo de usuario actual
 */
function seleccionarTipoUsuario(tipousuarioEmpleado) {
  const selectTipoUsuario = document.querySelector("#tipousuario");
  selectTipoUsuario.value = tipousuarioEmpleado; // Asignar el valor directamente
}

/**
 * Función para seleccionar el idioma del usuario 
 */
function seleccionarIdioma(IdiomaEmpleado) {
  const selectIdioma = document.querySelector("#Idioma");
  selectIdioma.value = IdiomaEmpleado; // Asignar el valor directamente
}

/**
 * Función para seleccionar las áreas del empleado
 */
function seleccionarAreas(areasEmpleado) {
  const selectAreas = document.querySelector("#areas"); // Elemento select

  if (typeof areasEmpleado === "string") {
    // Asignar el valor directamente si coincide con alguna opción del select
    const optionToSelect = Array.from(selectAreas.options).find(option => option.value === areasEmpleado.trim());
    if (optionToSelect) {
      selectAreas.value = areasEmpleado.trim();
    } else {
      console.warn(`El valor "${areasEmpleado}" no coincide con ninguna opción`);
    }
  } else {
    console.warn("El valor de las áreas no es una cadena de texto");
  }
}

async function actualizarEmpleado(event) {
  try {
    event.preventDefault();

    const formulario = document.querySelector("#formularioEmpleadoEdit");
    const formData = new FormData(formulario);

    // Enviar los datos del formulario al backend usando Axios
    const response = await axios.post("acciones_evaluador/updateEmpleado.php", formData);

    if (response.status === 200) {
      console.log("Empleado actualizado exitosamente");

      // Actualizar la tabla de empleados (o cualquier otro proceso)
      window.actualizarEmpleadoEdit(formData.get("id"));

      if (window.toastrOptions) {
        toastr.options = window.toastrOptions;
        toastr.success("¡El empleado se actualizó correctamente!");
      }

      setTimeout(() => {
        $("#editarEmpleadoModal").css("opacity", "");
        $("#editarEmpleadoModal").modal("hide");
      }, 600);
    } else {
      console.error("Error al actualizar el empleado");
    }
  } catch (error) {
    console.error("Error al enviar el formulario", error);
  }
}
