$(() => {
  $("#data-register").DataTable({
    aProcessing: true,
    aServerSide: true,
    ajax: {
      url: "../../controller/biometrico.php?op=listar_bio&fil=all",
      type: "post",
    },
    bDestroy: true,
    responsive: true,
    bInfo: true,
    iDisplayLength: 20,
    order: [[0, "desc"]],
    language: {
      sProcessing: "Procesando...",
      sLengthMenu: "Mostrar _MENU_ registros",
      sZeroRecords: "No se encontraron resultados",
      sEmptyTable: "Ningun dato disponible en esta tabla",
      sInfo:
        "Mostrando registro del _START_ al _END_ de un total de _TOTAL_ registros",
      sInfoEmpty: "Mostrando registros del 0 al 0 de un total de 0 registros",
      sInfoFiltered: "(filtrado de un total de _MAX_ registros)",
      sInfoPostFix: "",
      sSearch: "Buscar:",
      sUrl: "",
      sInfoThousands: ",",
      sLoadingRecords: "Cargando...",
      oPaginate: {
        sFirst: "Primero",
        sLast: "Ultimo",
        sNext: "Siguiente",
        sPrevious: "Anterior",
      },
      oAria: {
        sSortAscending:
          ": Activar para ordenar la columna de manera ascendente",
        sSortDescending:
          ": Activar para ordenar la columna de manera descendente",
      },
    },
    columns: [
      { data: "fecha_registro" },
      { data: "hora_registro" },
      { data: "tipo_registro" },
      { data: "nombre" },
    ],
    fnRowCallback: function (nRow, aData, iDisplayIndex, iDisplayIndexFull) {
      var tipo_registro = aData.tipo_registro.replace("_", " ");

      tipo_registro = tipo_registro
        .toLowerCase()
        .replace(/\b[a-z]/g, function (letter) {
          return letter.toUpperCase();
        });

      $("td:eq(2)", nRow).html(tipo_registro);

      $("td:eq(0)", nRow).html(getDateInString(aData.fecha_registro));
    },
  });

  $("#biometric-data").DataTable({
    aProcessing: true,
    aServerSide: true,
    dom: "Bfrtip",
    buttons: [
      "copyHtml5",
      "excelHtml5",
      "csvHtml5",
      "pdfHtml5",
      "print",
      "colvis",
    ],
    ajax: {
      url: "../../controller/biometrico.php?op=listar&fil=all",
      type: "post",
    },
    bDestroy: true,
    responsive: true,
    bInfo: true,
    iDisplayLength: 20,
    order: [[0, "desc"]],
    language: {
      sProcessing: "Procesando...",
      sLengthMenu: "Mostrar _MENU_ registros",
      sZeroRecords: "No se encontraron resultados",
      sEmptyTable: "Ningun dato disponible en esta tabla",
      sInfo:
        "Mostrando registro del _START_ al _END_ de un total de _TOTAL_ registros",
      sInfoEmpty: "Mostrando registros del 0 al 0 de un total de 0 registros",
      sInfoFiltered: "(filtrado de un total de _MAX_ registros)",
      sInfoPostFix: "",
      sSearch: "Buscar:",
      sUrl: "",
      sInfoThousands: ",",
      sLoadingRecords: "Cargando...",
      oPaginate: {
        sFirst: "Primero",
        sLast: "Ultimo",
        sNext: "Siguiente",
        sPrevious: "Anterior",
      },
      oAria: {
        sSortAscending:
          ": Activar para ordenar la columna de manera ascendente",
        sSortDescending:
          ": Activar para ordenar la columna de manera descendente",
      },
    },
    columns: [
      { data: "id" },
      { data: "name" },
      { data: "status" },
      { data: "access" },
    ],
  });

  $("#formBiometrico").on("submit", function (e) {
    guardaryactualizarBiometrico(e);
  });

  getCurrentDate();
  getTime();
});

function getTime() {
  var date = new Date();
  var h = date.getHours();
  var m = date.getMinutes();
  var s = date.getSeconds();
  var session = "AM";

  if (h == 0) {
    h = 12;
  }

  if (h > 12) {
    h = h - 12;
    session = "PM";
  }

  h = h < 10 ? "0" + h : h;
  m = m < 10 ? "0" + m : m;
  s = s < 10 ? "0" + s : s;

  var timeState = h + ":" + m + ":" + s;
  var time = h + ":" + m + ":" + s + " " + session;

  document.getElementById("MyClockDisplay").innerText = time;
  document.getElementById("MyClockDisplay").textContent = time;

  setTimeout(getTime, 1000);
}

function getCurrentDate() {
  const date = new Date();
  const options = {
    month: "long",
    day: "numeric",
    year: "numeric",
    weekday: "long",
  };

  document.getElementById("MyDateDisplay").innerText = date.toLocaleDateString(
    "default",
    options
  );
  document.getElementById("MyDateDisplay").textContent =
    date.toLocaleDateString("default", options);
}

function getDateInString(now) {
  const options = {
    month: "long",
    day: "numeric",
    year: "numeric",
    weekday: "long",
  };

  var date = new Date(now);
  date.setDate(date.getDate() + 1);

  return date.toLocaleDateString("default", options);
}

function loadJornadas() {
  $("#jornada").empty();

  $.ajax({
    url: "../../controller/jornada.php?op=select",
    type: "get",
    dataType: "json",
    success: function (data) {
      $.each(data, function (i, item) {
        $("#jornada").append(
          '<option value="' + item.id + '">' + item.text + "</option>"
        );
      });
    },
  });
}

function nuevo() {
  loadJornadas();
  $("#person").select2({
    placeholder: "Seleccione una persona",
    allowClear: true,
    theme: "bootstrap",
    ajax: {
      url: "../../controller/persona.php?op=select",
      dataType: "json",
      delay: 250,
      data: function (params) {
        return {
          searchTerm: params.term,
        };
      },
      processResults: function (response) {
        return {
          results: response,
        };
      },
    },
  });

  $("#biometricodbk").val("");
  $("#descripcion").val("");
  $("#mac").val("");
  $("#status").val("").trigger("change");
  $("#person").val(null).trigger("change");

  $("#lblTitulo").html("Nuevo Registro");
  $("#formBiometrico")[0].reset();
  $("#mantenimiento").modal("show");
  $("#user_current").addClass("d-none");
  $("#person_update").html();
}

function guardaryactualizarBiometrico(e) {
  e.preventDefault();
  var formData = new FormData($("#formBiometrico")[0]);
  $.ajax({
    url: "../../controller/biometrico.php?op=guardar",
    type: "POST",
    data: formData,
    contentType: false,
    processData: false,
    success: function (data) {
      $("#biometric-data").DataTable().ajax.reload();
      $("#mantenimiento").modal("hide");
      Swal.fire({
        title: "Operacion Exitosa",
        text: "La información se ha guardada satisfactoriamente",
        icon: "success",
        confirmButtonText: "Aceptar",
      });
    },
  });
}

function eliminar(id) {
  Swal.fire({
    title: "¿Esta seguro de eliminar el registro?",
    text: "¡No podrás revertir esto!",
    icon: "warning",
    showCancelButton: true,
    confirmButtonColor: "#3085d6",
    cancelButtonColor: "#d33",
    confirmButtonText: "Si, eliminarlo!",
  }).then((result) => {
    if (result.isConfirmed) {
      $.post(
        "../../controller/biometrico.php?op=eliminar",
        { id: id },
        function (e) {
          $("#biometric-data").DataTable().ajax.reload();
          Swal.fire("Eliminado!", "El registro ha sido eliminado.", "success");
        }
      );
    }
  });
}

function editar(id) {
  loadJornadas();
  $("#lblTitulo").html("Editar Registro");
  $("#formBiometrico")[0].reset();
  $("#mantenimiento").modal("show");

  var select = $("#person").select2({
    placeholder: "Seleccione una persona",
    allowClear: true,
    theme: "bootstrap",
    ajax: {
      url: "../../controller/persona.php?op=select",
      dataType: "json",
      delay: 250,
      data: function (params) {
        return {
          searchTerm: params.term,
        };
      },
      processResults: function (response) {
        return {
          results: response,
        };
      },
    },
  });

  $.post(
    "../../controller/biometrico.php?op=mostrar",
    { id: id },
    function (data, status) {
      data = JSON.parse(data);
      $("#biometricodbk").val(data.id);
      $("#descripcion").val(data.descripcion);
      $("#mac").val(data.mac);
      $("#status").val(data.status).trigger("change");
      $("#person").val(data.person).trigger("change");
      $("#user_current").removeClass("d-none");
      $("#jornada").val(data.jornada).trigger("change");
      $("#person_update").html(data.usuario);
    }
  );
}

$("#biometric-data").on("click", ".btnStatus", function () {
  var id = $(this).attr("idBiometrico");
  var status = $(this).attr("status");

  var status = status == 1 ? (status = 0) : (status = 1);

  Swal.fire({
    title: "¿Estas seguro de cambiar el estado?",
    text: "El estado actual es estado",
    icon: "warning",
    showCancelButton: true,
    confirmButtonColor: "#3085d6",
    cancelButtonColor: "#d33",
    confirmButtonText: "Aceptar",
  }).then((result) => {
    if (result.isConfirmed) {
      $.post(
        "../../controller/biometrico.php?op=status",
        { id: id, status: status },
        function (e) {
          $("#biometric-data").DataTable().ajax.reload();
        }
      );
    }
  });
});

$("#find_mac").on("click", function () {
  //Show Modal
  $("#mac_view").modal("show");

  pidIsRuning();
});

function pidIsRuning() {
  try {
    var pid = window.pid;
    if (pid) {
      console.log(pid);
    }
  } catch (e) {
    console.log(e);
  }
}

$("#copy_mac").on("click", function () {
  var mac_copy = document.getElementById("mac_direction");
  //Copy to clipboard mac
  mac_copy.select();

  navigator.clipboard.writeText(mac_copy.value).then(
    function () {
      /* clipboard successfully set */
      Swal.fire({
        title: "Operacion Exitosa",
        text: "La dirección MAC se ha copiado satisfactoriamente",
        icon: "success",
        confirmButtonText: "Aceptar",
      });
    },
    function () {
      /* clipboard write failed */
      Swal.fire({
        title: "Operacion Fallida",
        text: "La dirección MAC no se ha copiado satisfactoriamente",
        icon: "error",
        confirmButtonText: "Aceptar",
      });
    }
  );
});

$("#reg_bio").on("click", function () {
  $("#registro_biometrico").modal("show");
});

$("#save_register").on("click", function () {
  $("#register_form").submit();
});

$("#register_form").submit(function (e) {
  e.preventDefault();

  if ($("#register_format").val() == "") {
    Swal.fire({
      title: "Operacion Fallida",
      text: "El formato de registro es obligatorio",
      icon: "error",
      confirmButtonText: "Aceptar",
    });
    return false;
  }

  var formData = new FormData($("#register_form")[0]);
  $.ajax({
    url: "../../controller/biometrico.php?op=registro",
    type: "POST",
    data: formData,
    contentType: false,
    processData: false,
    success: function (data) {
      if (data.status === "error") {
        Swal.fire({
          title: "Operacion Fallida",
          text: data.message,
          icon: "error",
          confirmButtonText: "Aceptar",
        });
      } else {
        $("#registro_biometrico").modal("hide");
        $("#biometric-data").DataTable().ajax.reload();
        Swal.fire({
          title: "Operacion Exitosa",
          text: "La información se ha guardada satisfactoriamente",
          icon: "success",
          confirmButtonText: "Aceptar",
        });
      }
    },
  });
});
