class ProcessManager {

static show(clazz) {
  $("#processes").css("height","80px");
  $("#processes .title").html(clazz);
}

static hide() {
  $("#processes").css("height","0px");
}

static update(progress) {
  if ($("#processes .progress").hasClass("active")) {
    $("#processes .progress-bar").css("width",progress + "%");
  }
}

static init() {
  $("#processes .progress-bar").css("width","0%");
  $("#processes .icon").addClass("rotating");
  $("#processes .icon").removeClass("zmdi-check-circle").addClass("zmdi-settings");
  $("#processes .progress").addClass("active");
  $("#processes a").removeClass("hidden");
  $("#processes .progress-bar").removeClass("progress-bar-success").removeClass("progress-bar-warning").removeClass("progress-bar-danger");
  $("#processes .detail").html("Cargando...");
}

static complete() {
  $("#processes .progress-bar").css("width","100%");
  $("#processes .icon").removeClass("rotating");
  $("#processes .icon").removeClass("zmdi-settings").addClass("zmdi-check-circle");
  $("#processes a").addClass("hidden");
  $("#processes .progress").removeClass("active");
  $("#processes .progress-bar").addClass("progress-bar-success");
  $("#processes .detail").html("Completado. Refresca la pantalla para actualizar la información.");
}

static error() {
  $("#processes .progress-bar").css("width","100%");
  $("#processes .icon").removeClass("rotating");
  $("#processes .icon").removeClass("zmdi-settings").addClass("zmdi-check-circle");
  $("#processes a").addClass("hidden");
  $("#processes .progress").removeClass("active");
  $("#processes .progress-bar").addClass("progress-bar-danger");
  $("#processes .detail").html("Ha ocurrido un error.");
}

static cancel() {
  $("#processes .progress-bar").css("width","100%");
  $("#processes .icon").removeClass("rotating");
  $("#processes a").addClass("hidden");
  $("#processes .progress").removeClass("active");
  $("#processes .progress-bar").addClass("progress-bar-warning");
  $("#processes .detail").html("Proceso cancelado. Refresca la pantalla para actualizar la información.");
}

static start(clazz) {
  ProcessManager.show(clazz);
  $.ajax({
    url: "/process",
    type: 'POST',
    data: { class : clazz },
    success: function(result) {
      ProcessManager.init();
    },
    error: function(error) {
      ProcessManager.error();
    }
  });
}

static start_with_map(clazz,map) {
  ProcessManager.show(clazz);
  map['class'] = clazz;
  $.ajax({
    url: "/process",
    type: 'POST',
    data: map,
    success: function(result) {
      ProcessManager.init();
    },
    error: function(error) {
      ProcessManager.error();
    }
  });
}

static getProcesses(clazz) {
  $.ajax({
    url: "/processes",
    type: 'GET',
    data: { class : clazz },
    success: function(result) {
      if (result != "") {
        ProcessManager.show(result.name);
        if (result.progress >= 100.0) {
          ProcessManager.completeProcess(clazz);
        }
        ProcessManager.update(result.progress);
      }
    },
    error: function(error) {
      ProcessManager.error();
    }
  });
}

static completeProcess(clazz) {
  $.ajax({
    url: "/processes/" + clazz,
    type: 'POST',
    success: function(result) {
      ProcessManager.complete()
    },
    error: function(error) {
      ProcessManager.error();
    }
  });
}

static cleanProcess(clazz) {
  $.ajax({
    url: "/processes/" + clazz,
    type: 'POST',
    success: function(result) {
      ProcessManager.cancel();
    },
    error: function(error) {
      ProcessManager.error();
    }
  });
}

}