@GET
  @Produces(MediaType.APPLICATION_JSON)
  @Path("obtenerTodosMensajes")
  public RespuestaMensajeDTO obtenerTodosMensajes() {

    RespuestaMensajeDTO respuestaMensajeDTO = new RespuestaMensajeDTO(0, "OK");
    try {

      List<Mensaje> mensajes = mensajeBeanLocal.encontrarTodos(Mensaje.class, "id", "ASC");

      for (Mensaje m : mensajes) {
        MensajeDTO mensajeDTO =
            new MensajeDTO(
                m.getId(),
                m.getUsrdesde(),
                m.getUsrdesde(),
                m.getTexto(),
                m.getStatus(),
                FORMATO_FECHA.format(m.getFecha()));
        respuestaMensajeDTO.getMensajes().add(mensajeDTO);
      }

    } catch (Exception e) {
      respuestaMensajeDTO.setCodigo(1);
      respuestaMensajeDTO.setMensaje("Hubo un error en el sistema");
      e.printStackTrace();
    }
    return respuestaMensajeDTO;
  }
  @DELETE
  @Consumes(MediaType.APPLICATION_JSON)
  @Produces(MediaType.APPLICATION_JSON)
  @Path("removerMensaje")
  public RespuestaMensajeDTO removerMensaje(MensajeDTO mensajeDTO) {

    RespuestaMensajeDTO respuestaMensajeDTO = new RespuestaMensajeDTO(0, "OK");

    UsuarioDTO usuarioDTO = new UsuarioDTO();
    usuarioDTO.setCodigo(mensajeDTO.getUsrdesde());

    Client client = ClientBuilder.newClient();
    WebTarget targetMensaje = client.target(servicioObtenerUsuarioSesion);
    RespuestaSeguridadDTO resuSeg =
        targetMensaje
            .request("application/json")
            .post(
                Entity.entity(usuarioDTO, MediaType.APPLICATION_JSON), RespuestaSeguridadDTO.class);

    System.out.println("RESU " + resuSeg.getCodigo());
    System.out.println("RESU " + resuSeg.getMensaje());

    if (resuSeg.getCodigo() == 0) {

      try {

        // Validar si el mensaje existe en el sistema
        Mensaje mensajeRemover = mensajeBeanLocal.encontrarPorId(Mensaje.class, mensajeDTO.getId());

        if (mensajeRemover != null) {

          if (mensajeRemover.getUsrdesde() == mensajeDTO.getUsrdesde()) {
            mensajeBeanLocal.remover(mensajeRemover, mensajeRemover.getId());
          } else {
            respuestaMensajeDTO.setCodigo(4);
            respuestaMensajeDTO.setMensaje(
                "El Mensaje con Id : "
                    + mensajeRemover.getId()
                    + " No pertence al Usuario "
                    + mensajeDTO.getUsrdesde());
          }

        } else {
          respuestaMensajeDTO.setCodigo(1);
          respuestaMensajeDTO.setMensaje("El Mensaje no existe en el sistema");
        }

      } catch (Exception e) {

        respuestaMensajeDTO.setCodigo(2);
        respuestaMensajeDTO.setMensaje("Hubo un error en el sistema");
      }

    } else {
      respuestaMensajeDTO.setCodigo(10);
      respuestaMensajeDTO.setMensaje(resuSeg.getMensaje());
    }

    return respuestaMensajeDTO;
  }
  @GET
  @Produces(MediaType.APPLICATION_JSON)
  @Path("mensajesRecibidosPorUsuario/{usuario}")
  public RespuestaMensajeDTO mensajesRecibidosPorUsuario(@PathParam("usuario") long usuario) {

    RespuestaMensajeDTO respuestaMensajeDTO = new RespuestaMensajeDTO(0, "OK");

    UsuarioDTO usuarioDTO = new UsuarioDTO();
    usuarioDTO.setCodigo(usuario);

    Client client = ClientBuilder.newClient();
    WebTarget targetMensaje = client.target(servicioObtenerUsuarioSesion);
    RespuestaSeguridadDTO resu =
        targetMensaje
            .request("application/json")
            .post(
                Entity.entity(usuarioDTO, MediaType.APPLICATION_JSON), RespuestaSeguridadDTO.class);

    System.out.println("RESU " + resu.getCodigo());
    System.out.println("RESU " + resu.getMensaje());

    if (resu.getCodigo() == 0) {

      try {

        List<Mensaje> mensajes = mensajeBeanLocal.mensajesRecibidosPorUsuario(usuario);

        for (Mensaje m : mensajes) {
          MensajeDTO mensajeDTO =
              new MensajeDTO(
                  m.getId(),
                  m.getUsrdesde(),
                  m.getUsrpara(),
                  m.getTexto(),
                  m.getStatus(),
                  FORMATO_FECHA.format(m.getFecha()));
          respuestaMensajeDTO.getMensajes().add(mensajeDTO);
        }

        if (mensajes.size() > 0) {

          // Inicio Otorga Puntos por Fidelizacion
          try {
            RegistrarPuntosDTO registrarPuntosDTO = new RegistrarPuntosDTO();
            registrarPuntosDTO.setCodigoUsuario(Long.toString(usuario));
            registrarPuntosDTO.setServicio("mensajesRecibidosPorUsuario");

            client = ClientBuilder.newClient();
            targetMensaje = client.target(servicioRegistrarServicio);
            RespuestaDTO resuDTO =
                targetMensaje
                    .request("application/json")
                    .post(
                        Entity.entity(registrarPuntosDTO, MediaType.APPLICATION_JSON),
                        RespuestaDTO.class);
          } catch (Exception exc) {
            System.out.println("Fidelizacion deshabilidado");
          }
          // Fin Otorga Puntos por Fidelizacion
        }

      } catch (Exception e) {

        respuestaMensajeDTO.setCodigo(1);
        respuestaMensajeDTO.setMensaje("Hubo un error en el sistema");
        e.printStackTrace();
      }
    } else {
      respuestaMensajeDTO.setCodigo(10);
      respuestaMensajeDTO.setMensaje(resu.getMensaje());
    }

    return respuestaMensajeDTO;
  }
  @PUT
  @Produces(MediaType.APPLICATION_JSON)
  @Consumes(MediaType.APPLICATION_JSON)
  @Path("actualizarMensaje")
  public RespuestaMensajeDTO actualizarMensaje(MensajeDTO mensajeDTO) {

    RespuestaMensajeDTO respuestaMensajeDTO = new RespuestaMensajeDTO(0, "OK");

    UsuarioDTO usuarioDTO = new UsuarioDTO();
    usuarioDTO.setCodigo(mensajeDTO.getUsrdesde());

    Client client = ClientBuilder.newClient();
    WebTarget targetMensaje = client.target(servicioObtenerUsuarioSesion);
    RespuestaSeguridadDTO resuSeg =
        targetMensaje
            .request("application/json")
            .post(
                Entity.entity(usuarioDTO, MediaType.APPLICATION_JSON), RespuestaSeguridadDTO.class);

    System.out.println("RESU desde " + resuSeg.getCodigo());
    System.out.println("RESU desde " + resuSeg.getMensaje());

    boolean estaUsuarioSesion = false;
    if (resuSeg.getCodigo() == 0) {
      estaUsuarioSesion = true;
    } else {
      usuarioDTO.setCodigo(mensajeDTO.getUsrpara());
      client = ClientBuilder.newClient();
      targetMensaje = client.target(servicioObtenerUsuarioSesion);
      resuSeg =
          targetMensaje
              .request("application/json")
              .post(
                  Entity.entity(usuarioDTO, MediaType.APPLICATION_JSON),
                  RespuestaSeguridadDTO.class);
      if (resuSeg.getCodigo() == 0) {
        estaUsuarioSesion = true;
      }
      System.out.println("RESU para" + resuSeg.getCodigo());
      System.out.println("RESU para" + resuSeg.getMensaje());
    }

    if (estaUsuarioSesion) {

      try {

        // Validar si el mensaje existe en el sistema
        Mensaje mensajeActualizar =
            mensajeBeanLocal.encontrarPorId(Mensaje.class, mensajeDTO.getId());

        if (mensajeActualizar != null) {
          if (mensajeActualizar.getStatus() == true) {
            respuestaMensajeDTO.setCodigo(1);
            respuestaMensajeDTO.setMensaje(
                "El Mensaje con Id : " + mensajeActualizar.getId() + " ya tiene estatus Leido");
          } else {

            if (mensajeActualizar.getUsrdesde() == mensajeDTO.getUsrdesde()) {
              mensajeActualizar.setStatus(true);
              mensajeBeanLocal.insertarOActualizar(mensajeActualizar);

              // Inicio Otorga Puntos por Fidelizacion
              try {
                RegistrarPuntosDTO registrarPuntosDTO = new RegistrarPuntosDTO();
                registrarPuntosDTO.setCodigoUsuario(usuarioDTO.getCodigo().toString());
                registrarPuntosDTO.setServicio("actualizarMensaje");

                client = ClientBuilder.newClient();
                targetMensaje = client.target(servicioRegistrarServicio);
                RespuestaDTO resuDTO =
                    targetMensaje
                        .request("application/json")
                        .post(
                            Entity.entity(registrarPuntosDTO, MediaType.APPLICATION_JSON),
                            RespuestaDTO.class);
              } catch (Exception exc) {
                System.out.println("Fidelizacion deshabilidado");
              }
              // Fin Otorga Puntos por Fidelizacion

            } else {
              respuestaMensajeDTO.setCodigo(4);
              respuestaMensajeDTO.setMensaje(
                  "El Mensaje con Id : "
                      + mensajeActualizar.getId()
                      + " No pertence al Usuario "
                      + mensajeDTO.getUsrdesde());
            }
          }
        } else {
          respuestaMensajeDTO.setCodigo(2);
          respuestaMensajeDTO.setMensaje("El Mensaje no existe en el sistema");
        }

      } catch (Exception err) {

        respuestaMensajeDTO.setCodigo(3);
        respuestaMensajeDTO.setMensaje("Hubo un error en el sistema");
      }
    } else {
      respuestaMensajeDTO.setCodigo(10);
      respuestaMensajeDTO.setMensaje(resuSeg.getMensaje());
    }

    return respuestaMensajeDTO;
  }
  @GET
  @Produces(MediaType.APPLICATION_JSON)
  @Path("encontrarMensajePorId/{cod}/{id}")
  public RespuestaMensajeDTO encontrarMensajePorId(
      @PathParam("cod") long codUsuario, @PathParam("id") long idMensaje) {

    RespuestaMensajeDTO respuestaMensajeDTO = new RespuestaMensajeDTO(0, "OK");

    UsuarioDTO usuarioDTO = new UsuarioDTO();
    usuarioDTO.setCodigo(codUsuario);

    Client client = ClientBuilder.newClient();
    WebTarget targetMensaje = client.target(servicioObtenerUsuarioSesion);
    RespuestaSeguridadDTO resu =
        targetMensaje
            .request("application/json")
            .post(
                Entity.entity(usuarioDTO, MediaType.APPLICATION_JSON), RespuestaSeguridadDTO.class);

    System.out.println("RESU " + resu.getCodigo());
    System.out.println("RESU " + resu.getMensaje());

    if (resu.getCodigo() == 0) {

      try {

        Mensaje m = mensajeBeanLocal.encontrarPorId(Mensaje.class, new Long(idMensaje));

        if (m != null) {
          MensajeDTO mensajeDTO =
              new MensajeDTO(
                  m.getId(),
                  m.getUsrdesde(),
                  m.getUsrpara(),
                  m.getTexto(),
                  m.getStatus(),
                  FORMATO_FECHA.format(m.getFecha()));
          respuestaMensajeDTO.getMensajes().add(mensajeDTO);

          // Inicio Otorga Puntos por Fidelizacion
          try {
            RegistrarPuntosDTO registrarPuntosDTO = new RegistrarPuntosDTO();
            registrarPuntosDTO.setCodigoUsuario(Long.toString(codUsuario));
            registrarPuntosDTO.setServicio("encontrarMensajePorId");

            client = ClientBuilder.newClient();
            targetMensaje = client.target(servicioRegistrarServicio);
            RespuestaDTO resuDTO =
                targetMensaje
                    .request("application/json")
                    .post(
                        Entity.entity(registrarPuntosDTO, MediaType.APPLICATION_JSON),
                        RespuestaDTO.class);
          } catch (Exception exc) {
            System.out.println("Fidelizacion deshabilidado");
          }
          // Fin Otorga Puntos por Fidelizacion

        } else {
          respuestaMensajeDTO.setCodigo(2);
          respuestaMensajeDTO.setMensaje("El Mensaje No existe en el sistema");
        }

      } catch (Exception e) {
        respuestaMensajeDTO.setCodigo(1);
        respuestaMensajeDTO.setMensaje("Hubo un error en el sistema");
        e.printStackTrace();
      }
    } else {

      respuestaMensajeDTO.setCodigo(10);
      respuestaMensajeDTO.setMensaje(resu.getMensaje());
    }

    return respuestaMensajeDTO;
  }