/*Mauricio García - garmauco@gmail.com, developer@3mas1r.com*/
var app = angular.module("App", [
  "angularUtils.directives.dirPagination",
  "ngAnimate",
  "angularModalService",
  "ui.bootstrap"
]);

app.run(function($rootScope) {
  /*
        Recibe y difunde mensajes entre controladores
    */
  $rootScope.$on("handleEmit", function(event, args) {
    $rootScope.$broadcast("handleBroadcast", args);
  });
});

/*Controlador para el apartado Cargo*/
app.controller("cargoCrtl", function($scope, $http, ModalService) {
  $scope.cargos = []; //declarar un array vacio
  $scope.totalItems = 0;
  getCargos(); //Carga todos los Registros
  function getCargos() {
    $http.get(base_url + "cargo/pagination").success(function(response) {
      $scope.cargos = response; //solicitud ajax para obtener los datos de $scope.data
      $scope.totalItems = $scope.cargos.length;
    });
  }
  $scope.sort = function(keyname) {
    /*función para ordenar segun parametro seleccionado en el header de la tabla de paginación*/
    $scope.sortKey = keyname; //establecer la sortKey para el parametro que se pasa
    $scope.reverse = !$scope.reverse; //si es cierto que sea falsa, y viceversa
  };

  $scope.deleteCargo = function(id) {
    ModalService.showModal({
      templateUrl:
        "modal.html" /*Plantilla usada por el id de la modal layout/modalConfirmDelete.php*/,
      controller: "ModalController"
    }).then(function(modal) {
      modal.element.modal();
      $scope.$emit("handleEmit", {
        arrayAsignaciones: null
      }); /*Enviamos un valor vacio ya que no necesitamos la opción*/
      modal.close.then(function(result) {
        if (result == "Si") {
          $http.post(base_url + "cargo/delete/" + id).success(function(data) {
            getCargos();
            $scope.$emit("handleEmit", {
              message: "show"
            }); /*Enviamos el parametro para mostrar el mensaje alert de la acci'on success*/
          });
        }
      });
    });
  };
});

/*Controlador para el apartado Empresa*/
app.controller("empresaCrtl", function($scope, $http, ModalService) {
  $scope.empresas = []; //declarar un array vacio
  $scope.totalItems = 0;
  getEmpresas(); //Carga todos los Registros
  function getEmpresas() {
    $http.get(base_url + "empresa/pagination").success(function(response) {
      $scope.empresas = response; //solicitud ajax para obtener los datos de $scope.data
      $scope.totalItems = $scope.empresas.length;
    });
  }
  $scope.sort = function(keyname) {
    /*función para ordenar segun parametro seleccionado en el header de la tabla de paginación*/
    $scope.sortKey = keyname; //establecer la sortKey para el parametro que se pasa
    $scope.reverse = !$scope.reverse; //si es cierto que sea falsa, y viceversa
  };

  $scope.deleteEmpresa = function(id) {
    ModalService.showModal({
      templateUrl:
        "modal.html" /*Plantilla usada por el id de la modal layout/modalConfirmDelete.php*/,
      controller: "ModalController"
    }).then(function(modal) {
      modal.element.modal();
      $scope.$emit("handleEmit", {
        arrayAsignaciones: null
      }); /*Enviamos un valor vacio ya que no necesitamos la opción*/
      modal.close.then(function(result) {
        if (result == "Si") {
          $http.post(base_url + "empresa/delete/" + id).success(function(data) {
            getEmpresas();
            $scope.$emit("handleEmit", {
              message: "show"
            }); /*Enviamos el parametro para mostrar el mensaje alert de la acci'on success*/
          });
        }
      });
    });
  };
});

/*Controlador para el apartado Contrato*/
app.controller("contratoCrtl", function($scope, $http, ModalService) {
  $scope.contratos = []; //declarar un array vacio
  $scope.totalItems = 0;
  getContratos(); //Carga todos los Registros
  function getContratos() {
    $http.get(base_url + "contrato/pagination").success(function(response) {
      $scope.contratos = response; //solicitud ajax para obtener los datos de $scope.data
      $scope.totalItems = $scope.contratos.length;
    });
  }
  $scope.sort = function(keyname) {
    /*función para ordenar segun parametro seleccionado en el header de la tabla de paginación*/
    $scope.sortKey = keyname; //establecer la sortKey para el parametro que se pasa
    $scope.reverse = !$scope.reverse; //si es cierto que sea falsa, y viceversa
  };

  $scope.deleteContrato = function(id) {
    ModalService.showModal({
      templateUrl:
        "modal.html" /*Plantilla usada por el id de la modal layout/modalConfirmDelete.php*/,
      controller: "ModalController"
    }).then(function(modal) {
      modal.element.modal();
      $scope.$emit("handleEmit", {
        arrayAsignaciones: null
      }); /*Enviamos un valor vacio ya que no necesitamos la opción*/
      modal.close.then(function(result) {
        if (result == "Si") {
          $http
            .post(base_url + "contrato/delete/" + id)
            .success(function(data) {
              getContratos();
              $scope.$emit("handleEmit", {
                message: "show"
              }); /*Enviamos el parametro para mostrar el mensaje alert de la acci'on success*/
            });
        }
      });
    });
  };
});

/*Controlador para el apartado Subir Documentos*/
app.controller("documentoCrtl", function($scope, $http, ModalService) {
  $scope.documentos = []; //declarar un array vacio
  $scope.totalItems = 0;
  getDocumentos(); //Carga todos los Registros
  function getDocumentos() {
    $http.get(base_url + "documento/pagination").success(function(response) {
      $scope.documentos = response; //solicitud ajax para obtener los datos de $scope.data
      $scope.totalItems = $scope.documentos.length;
    });
  }
  $scope.sort = function(keyname) {
    /*función para ordenar segun parametro seleccionado en el header de la tabla de paginación*/
    $scope.sortKey = keyname; //establecer la sortKey para el parametro que se pasa
    $scope.reverse = !$scope.reverse; //si es cierto que sea falsa, y viceversa
  };

  $scope.deleteDocumento = function(id) {
    ModalService.showModal({
      templateUrl:
        "modal.html" /*Plantilla usada por el id de la modal layout/modalConfirmDelete.php*/,
      controller: "ModalController"
    }).then(function(modal) {
      modal.element.modal();
      $scope.$emit("handleEmit", {
        arrayAsignaciones: null
      }); /*Enviamos un valor vacio ya que no necesitamos la opción*/
      modal.close.then(function(result) {
        if (result == "Si") {
          $http
            .post(base_url + "documento/delete/" + id)
            .success(function(data) {
              getDocumentos();
              $scope.$emit("handleEmit", {
                message: "show"
              }); /*Enviamos el parametro para mostrar el mensaje alert de la acci'on success*/
            });
        }
      });
    });
  };
});

/*Controlador para el apartado Tipo documento*/
app.controller("tipodocumentoCrtl", function($scope, $http, ModalService) {
  $scope.tipo_documentos = []; //declarar un array vacio
  $scope.totalItems = 0;
  getTipo_documentos(); //Carga todos los Registros
  function getTipo_documentos() {
    $http.get(base_url + "tipo_documento/pagination").success(function(response) {
      $scope.tipo_documentos = response; //solicitud ajax para obtener los datos de $scope.data
      $scope.totalItems = $scope.tipo_documentos.length;
    });
  }
  $scope.sort = function(keyname) {
    /*función para ordenar segun parametro seleccionado en el header de la tabla de paginación*/
    $scope.sortKey = keyname; //establecer la sortKey para el parametro que se pasa
    $scope.reverse = !$scope.reverse; //si es cierto que sea falsa, y viceversa
  };

  $scope.deleteTipo_documento = function(id) {
    ModalService.showModal({
      templateUrl:
        "modal.html" /*Plantilla usada por el id de la modal layout/modalConfirmDelete.php*/,
      controller: "ModalController"
    }).then(function(modal) {
      modal.element.modal();
      $scope.$emit("handleEmit", {
        arrayAsignaciones: null
      }); /*Enviamos un valor vacio ya que no necesitamos la opción*/
      modal.close.then(function(result) {
        if (result == "Si") {
          $http.post(base_url + "tipo_documento/delete/" + id).success(function(data) {
            getCargos();
            $scope.$emit("handleEmit", {
              message: "show"
            }); /*Enviamos el parametro para mostrar el mensaje alert de la acci'on success*/
          });
        }
      });
    });
  };
});



/*Controlador para el apartado Certificado Laboral*/
app.controller("certificadoCrtl", function($scope, $http, ModalService) {
  $scope.certificados = []; //declarar un array vacio
  $scope.totalItems = 0;
  getCertificados(); //Carga todos los Registros
  function getCertificados() {
    $http
      .get(base_url + "certificado_laboral/pagination")
      .success(function(response) {
        $scope.certificados = response; //solicitud ajax para obtener los datos de $scope.data
        $scope.totalItems = $scope.certificados.length;
      });
  }
  $scope.sort = function(keyname) {
    /*función para ordenar segun parametro seleccionado en el header de la tabla de paginación*/
    $scope.sortKey = keyname; //establecer la sortKey para el parametro que se pasa
    $scope.reverse = !$scope.reverse; //si es cierto que sea falsa, y viceversa
  };

  $scope.deleteCertificado = function(id) {
    ModalService.showModal({
      templateUrl:
        "modal.html" /*Plantilla usada por el id de la modal layout/modalConfirmDelete.php*/,
      controller: "ModalController"
    }).then(function(modal) {
      modal.element.modal();
      $scope.$emit("handleEmit", {
        arrayAsignaciones: null
      }); /*Enviamos un valor vacio ya que no necesitamos la opción*/
      modal.close.then(function(result) {
        if (result == "Si") {
          $http
            .post(base_url + "certificado_laboral/delete/" + id)
            .success(function(data) {
              getCertificados();
              $scope.$emit("handleEmit", {
                message: "show"
              }); /*Enviamos el parametro para mostrar el mensaje alert de la acci'on success*/
            });
        }
      });
    });
  };
});



/*Controlador para el apartado Usuario*/
app.controller("usuarioCrtl", function($scope, $http, ModalService) {
  $scope.usuarios = []; //declarar un array vacio
  $scope.totalItems = 0;
  getUsuarios(); //Carga todos los Registros
  function getUsuarios() {
    $http.get(base_url + "usuario/pagination").success(function(response) {
      $scope.usuarios = response; //solicitud ajax para obtener los datos de $scope.data
      $scope.totalItems = $scope.usuarios.length;
    });
  }
  $scope.sort = function(keyname) {
    /*función para ordenar segun parametro seleccionado en el header de la tabla de paginación*/
    $scope.sortKey = keyname; //establecer la sortKey para el parametro que se pasa
    $scope.reverse = !$scope.reverse; //si es cierto que sea falsa, y viceversa
  };

  $scope.deleteUsuario = function(id) {
    ModalService.showModal({
      templateUrl:
        "modal.html" /*Plantilla usada por el id de la modal layout/modalConfirmDelete.php*/,
      controller: "ModalController"
    }).then(function(modal) {
      modal.element.modal();
      $scope.$emit("handleEmit", {
        arrayAsignaciones: null
      }); /*Enviamos un valor vacio ya que no necesitamos la opción*/
      modal.close.then(function(result) {
        if (result == "Si") {
          $http.post(base_url + "usuario/delete/" + id).success(function(data) {
            getUsuarios();
            $scope.$emit("handleEmit", {
              message: "show"
            }); /*Enviamos el parametro para mostrar el mensaje alert de la acci'on success*/
          });
        }
      });
    });
  };
});

/*Controlador para el apartado Roles*/
app.controller("rolCrtl", function($scope, $http, ModalService) {
  $scope.rols = []; //declarar un array vacio
  $scope.totalItems = 0;
  getRols(); //Carga todos los Registros
  function getRols() {
    $http.get(base_url + "rol/pagination").success(function(response) {
      $scope.rols = response; //solicitud ajax para obtener los datos de $scope.data
      $scope.totalItems = $scope.rols.length;
    });
  }
  $scope.sort = function(keyname) {
    /*función para ordenar segun parametro seleccionado en el header de la tabla de paginación*/
    $scope.sortKey = keyname; //establecer la sortKey para el parametro que se pasa
    $scope.reverse = !$scope.reverse; //si es cierto que sea falsa, y viceversa
  };

  $scope.deleteRol = function(id) {
    ModalService.showModal({
      templateUrl:
        "modal.html" /*Plantilla usada por el id de la modal layout/modalConfirmDelete.php*/,
      controller: "ModalController"
    }).then(function(modal) {
      modal.element.modal();
      $scope.$emit("handleEmit", {
        arrayAsignaciones: null
      }); /*Enviamos un valor vacio ya que no necesitamos la opción*/
      modal.close.then(function(result) {
        if (result == "Si") {
          $http.post(base_url + "rol/delete/" + id).success(function(data) {
            getRols();
            $scope.$emit("handleEmit", {
              message: "show"
            }); /*Enviamos el parametro para mostrar el mensaje alert de la acci'on success*/
          });
        }
      });
    });
  };
});

/*Controlador para el apartado Permiso*/
app.controller("permisoCrtl", function($scope, $http, ModalService) {
  $scope.permisos = []; //declarar un array vacio
  $scope.totalItems = 0;
  getPermisos(); //Carga todos los Registros
  function getPermisos() {
    $http.get(base_url + "permiso/pagination").success(function(response) {
      $scope.permisos = response; //solicitud ajax para obtener los datos de $scope.data
      $scope.totalItems = $scope.permisos.length;
    });
  }
  $scope.sort = function(keyname) {
    /*función para ordenar segun parametro seleccionado en el header de la tabla de paginación*/
    $scope.sortKey = keyname; //establecer la sortKey para el parametro que se pasa
    $scope.reverse = !$scope.reverse; //si es cierto que sea falsa, y viceversa
  };

  $scope.deletePermiso = function(id) {
    ModalService.showModal({
      templateUrl:
        "modal.html" /*Plantilla usada por el id de la modal layout/modalConfirmDelete.php*/,
      controller: "ModalController"
    }).then(function(modal) {
      modal.element.modal();
      $scope.$emit("handleEmit", {
        arrayAsignaciones: null
      }); /*Enviamos un valor vacio ya que no necesitamos la opción*/
      modal.close.then(function(result) {
        if (result == "Si") {
          $http.post(base_url + "permiso/delete/" + id).success(function(data) {
            getPermisos();
            $scope.$emit("handleEmit", {
              message: "show"
            }); /*Enviamos el parametro para mostrar el mensaje alert de la acci'on success*/
          });
        }
      });
    });
  };

});


/*USUARIOS **/


/*Controlador para el apartado Usuario Certificado Laboral*/
app.controller("usuarioCertificadoCrtl", function($scope, $http, ModalService) {
  $scope.certificados = []; //declarar un array vacio
  $scope.totalItems = 0;
  getCertificados(); //Carga todos los Registros
  function getCertificados() {
    $http
      .get(base_url + "usuario_certificado/pagination")
      .success(function(response) {
        $scope.certificados = response; //solicitud ajax para obtener los datos de $scope.data
        $scope.totalItems = $scope.certificados.length;
      });
  }
  $scope.sort = function(keyname) {
    /*función para ordenar segun parametro seleccionado en el header de la tabla de paginación*/
    $scope.sortKey = keyname; //establecer la sortKey para el parametro que se pasa
    $scope.reverse = !$scope.reverse; //si es cierto que sea falsa, y viceversa
  };
});
  /*Controlador para el apartado Usuario Documentos*/
  app.controller("usuarioDocumentoCrtl", function($scope, $http, ModalService) {
    $scope.documentos = []; //declarar un array vacio
    $scope.totalItems = 0;
    getDocumentos(); //Carga todos los Registros
    function getDocumentos() {
      $http.get(base_url + "usuario_documento/pagination").success(function(response) {
        $scope.documentos = response; //solicitud ajax para obtener los datos de $scope.data
        $scope.totalItems = $scope.documentos.length;
      });
    }
    $scope.sort = function(keyname) {
      /*función para ordenar segun parametro seleccionado en el header de la tabla de paginación*/
      $scope.sortKey = keyname; //establecer la sortKey para el parametro que se pasa
      $scope.reverse = !$scope.reverse; //si es cierto que sea falsa, y viceversa
    };
});

/*Controlador para la el mensaje tipo alert de confirmación de Eliminación de registros*/
app.controller("msgDelete", function($scope) {
  $scope.closeAlert = function() {
    $scope.alerts = null;
  };
  /*
  	Comprobamos que el mensaje que se envia desde los otros controladores sea igual a 'show'
	para mostrar el mensaje tipo alert success
  	*/
  $scope.$on("handleBroadcast", function(event, args) {
    if (args.message == "show") {
      $scope.alerts = [];
      $scope.alerts.push({
        type: "success",
        msg: "El Registro ha sido Eliminado",
        show: true
      });
    }
  });
});

/*Controlador para la ventana modal de confirmación de Eliminación de registros*/
app.controller("ModalController", function($scope, close) {
  $scope.$on("handleBroadcast", function(event, args) {
    $scope.textoDel = "Estas seguro de Eliminar este Registro?";
    $scope.textoAsig = "";
    $scope.textoAsig2 = "";
    var plrArg2 = "";
    if (args.arrayAsignaciones !== null) {
      console.log("nro Asignaciones" + args.arrayAsignaciones);
      var arrayDatos = args.arrayAsignaciones.split("||");
      var nroAsignaciones = arrayDatos[2];
      var arg2 = arrayDatos[1];
      var arg1 = arrayDatos[0];

      if (nroAsignaciones > 0) {
        if (nroAsignaciones > 1) plrArg2 = "es";
        $scope.textoAsig =
          "El " +
          arg1 +
          " Actualmente se encuentra asignado a " +
          nroAsignaciones +
          " " +
          arg2 +
          "" +
          plrArg2 +
          "";
        $scope.textoAsig2 =
          "Esta Acción también Eliminara los Registros de Asignación del " +
          arg1;
      }
    }
  });
  $scope.close = function(result) {
    close(result, 500); // close, but give 500ms for bootstrap to animate
  };
});

/*Controlador para la ventana modal para pasar nombre de Imagen*/
app.controller("ModalControllerImagen", function($scope, close) {
  $scope.$on("handleBroadcast", function(event, args) {
    var arrayDatos = args.arrayAsignaciones.split("||");
    var imagen = arrayDatos[0];
  });
  $scope.close = function(result) {
    close(result, 500); // close, but give 500ms for bootstrap to animate
  };
});
