/**
   * action que grava o jogo como favorito
   *
   * @return
   * @throws ActionException
   */
  public String jogoFavorito() throws ActionException {

    // opcao selecionada
    String opcaoFavoritos = input.getString("jogoFavorito");

    int idDoUsuarioLogado = UserHelper.mantemUsuarioNaRequisicao(this);

    setJogoId(input.getInt("id"));

    if (idDoUsuarioLogado > 0) {
      JogosFavoritosDAO jogosFavoritosDAO = JogosFavoritosDAO.getinstance();
      JogosFavoritosVO jogosFavoritosVO = new JogosFavoritosVO();
      jogosFavoritosVO.getJogo().setId(getJogoId());
      jogosFavoritosVO.getUsuario().setId(idDoUsuarioLogado);
      try {
        if (opcaoFavoritos.equals(Constantes.OPCAO_SIM))
          jogosFavoritosDAO.adiciona(jogosFavoritosVO);
        else jogosFavoritosDAO.remove(jogosFavoritosVO);
      } catch (DAOException e) {
        logger.error("Erro ao gravar o jogo favorito", e);
      }
    }

    return SUCCESS;
  }
  /**
   * action que lista todos os favoritos
   *
   * @return
   * @throws ActionException
   */
  public String lista() throws ActionException {
    InfoHelper.setExtraInfo(this);

    int idDoUsuarioLogado = UserHelper.mantemUsuarioNaRequisicao(this);

    if (UserHelper.usuarioEstaLogado(this)) {
      Collection<JogosFavoritosVO> jogosFavoritos = new ArrayList<JogosFavoritosVO>();
      Collection<EmuladoresFavoritosVO> emuladoresFavoritos =
          new ArrayList<EmuladoresFavoritosVO>();
      JogosFavoritosDAO jogosFavoritosDAO = JogosFavoritosDAO.getinstance();
      EmuladoresFavoritosDAO emuladoresFavoritosDAO = EmuladoresFavoritosDAO.getinstance();
      try {
        jogosFavoritos = jogosFavoritosDAO.buscaPorUsuario(idDoUsuarioLogado);
        output.setValue("jogosFavoritos", jogosFavoritos);
        emuladoresFavoritos = emuladoresFavoritosDAO.buscaPorUsuario(idDoUsuarioLogado);
        output.setValue("emuladoresFavoritos", emuladoresFavoritos);
      } catch (DAOException e) {
        logger.error("Erro ao ler favoritos", e);
      }
    }

    return SUCCESS;
  }
  /** verifica se o emulador favorito esta cadastrado */
  private void setEmuladorFavorito() {

    int idDoUsuarioLogado = UserHelper.mantemUsuarioNaRequisicao(this);

    if (idDoUsuarioLogado > 0) {
      EmuladoresFavoritosDAO jogosFavoritosDAO = EmuladoresFavoritosDAO.getinstance();
      EmuladoresFavoritosVO emuladoresFavoritosVO = new EmuladoresFavoritosVO();
      emuladoresFavoritosVO.getEmulador().setId(input.getInt("id"));
      emuladoresFavoritosVO.getUsuario().setId(idDoUsuarioLogado);
      try {
        if (jogosFavoritosDAO.existeFavoritoParaEsseEmulador(emuladoresFavoritosVO)) {
          logger.info(input.getInt("id") + " ta no favoritos!");
          output.setValue("emuladorFavorito", Constantes.OPCAO_SIM);
        } else {
          logger.info(input.getInt("id") + " NAO ta no favoritos!");
          output.setValue("emuladorFavorito", Constantes.OPCAO_NAO);
        }
      } catch (DAOException e) {
        logger.error("Erro ao gravar o emulador favorito", e);
      }
    }
  }
  /**
   * aba de reviews
   *
   * @return
   * @throws ActionException
   */
  public String review() throws ActionException {
    int idUsuario = InfoHelper.setExtraInfo(this);
    boolean esseUsuarioJaVotou = false;
    int idEmulador = 0;

    try {
      idEmulador = input.getInt("id");
    } catch (InputException ie) {
      return NULL;
    }

    boolean estaLogado = UserHelper.usuarioEstaLogado(this);
    setEmuladorFavorito();
    // buscar reviews
    ReviewDeEmuladorDAO reviewDeEmuladorDAO = ReviewDeEmuladorDAO.getinstance();
    Collection<?> reviews;
    try {
      reviews = reviewDeEmuladorDAO.buscaPorEmulador(idEmulador);
      output.setValue("reviews", reviews);

      if (estaLogado) {
        ReviewDeEmuladorDAO daoReviewDeEmulador = ReviewDeEmuladorDAO.getinstance();
        esseUsuarioJaVotou = daoReviewDeEmulador.usuarioFezReviewDeEmulador(idUsuario, idEmulador);

        if (esseUsuarioJaVotou) output.setValue("jaVotou", "S");
        else output.setValue("jaVotou", "N");
      } else {
        output.setValue("jaVotou", "N");
      }

    } catch (DAOException e) {
      logger.debug("Erro na busca de reviews...", e);
    }

    output.setValue("aba2", "S");
    TopHelper.updateEmuladorHelper(idEmulador, output);
    return SUCCESS;
  }
  /**
   * action que grava o jogo como favorito
   *
   * @return
   * @throws ActionException
   */
  public String emuladorFavorito() throws ActionException {

    // opcao selecionada
    String opcaoFavoritos = input.getString("emuladorFavorito");

    int idDoUsuarioLogado = UserHelper.mantemUsuarioNaRequisicao(this);

    if (idDoUsuarioLogado > 0) {
      EmuladoresFavoritosDAO emuladoresFavoritosDAO = EmuladoresFavoritosDAO.getinstance();
      EmuladoresFavoritosVO emuFavoritosVO = new EmuladoresFavoritosVO();
      emuFavoritosVO.getEmulador().setId(input.getInt("id"));
      emuFavoritosVO.getUsuario().setId(idDoUsuarioLogado);
      try {
        if (opcaoFavoritos.equals(Constantes.OPCAO_SIM))
          emuladoresFavoritosDAO.adiciona(emuFavoritosVO);
        else emuladoresFavoritosDAO.remove(emuFavoritosVO);
      } catch (DAOException e) {
        logger.error("Erro ao gravar o emulador favorito", e);
      }
    }

    return SUCCESS;
  }