public static BigDecimal calcula(Sessao sessao, Integer quantidade) {
    BigDecimal preco = sessao.getPreco();

    if (sessao.getEspetaculo().getTipo().equals(TipoDeEspetaculo.CINEMA)
        || sessao.getEspetaculo().getTipo().equals(TipoDeEspetaculo.SHOW)) {
      if (Sessao.calculaFatorDisponivelSobreTotal(sessao) <= 0.05) {
        double fatorReajuste = 0.10;
        preco = Sessao.reajustarSessao(sessao, fatorReajuste);
      }
    } else if (sessao.getEspetaculo().getTipo().equals(TipoDeEspetaculo.BALLET)
        || sessao.getEspetaculo().getTipo().equals(TipoDeEspetaculo.ORQUESTRA)) {
      if (Sessao.calculaFatorDisponivelSobreTotal(sessao) <= 0.50) {
        double fatorReajuste = 0.20;
        preco = Sessao.reajustarSessao(sessao, fatorReajuste);
      }

      if (sessao.getDuracaoEmMinutos() > UMA_HORA) {
        double fatorReajuste = 0.10;
        preco = preco.add(sessao.getPreco().multiply(BigDecimal.valueOf(fatorReajuste)));
      }
    }
    return preco.multiply(BigDecimal.valueOf(quantidade));
  }