private Statistic getMostPlayedAgainst(Long team_id) {

    StringBuilder sqlToQuery =
        new StringBuilder(
            "SELECT DISTINCT Team.id, Team.team_name, Team.image, COUNT(*) AS count_matches from Team, Game ");
    sqlToQuery.append(
        "WHERE (end_time != 0 AND Team.id = Game.home_team_id AND Game.visitor_team_id = ");
    sqlToQuery.append(team_id);
    sqlToQuery.append(" ) ");
    sqlToQuery.append("OR (end_time != 0 AND Game.home_team_id = ");
    sqlToQuery.append(team_id);
    sqlToQuery.append(" And Team.id = Game.visitor_team_id ) ");
    sqlToQuery.append("Group BY Team.id ORDER BY count_matches DESC LIMIT 1;");

    ResultSet resultset = OpenFoosDatabase.executeQueryToFoosBase(sqlToQuery.toString());
    Team team = new Team();
    Statistic statistic = new Statistic();
    try {
      while (resultset.next()) {

        team.id = resultset.getLong("id");
        team.team_name = resultset.getString("team_name");
        team.image = resultset.getString("image");
        statistic.count_most_played_against = resultset.getInt("count_matches");
      }
      resultset.close();
      if (team.id != null && team.team_name != null) {
        statistic.target_team = team;
      }
    } catch (SQLException e) {
      System.out.println(e.toString());
    }

    return statistic;
  }
  // the difference is equal to 1. Matches that was played 10-9 or 9-10
  private Statistic getMostRegularAppearances(Long team_id) {

    StringBuilder sqlToQuery =
        new StringBuilder(
            "SELECT DISTINCT Team.id, Team.team_name, Team.image, count(*) AS count_matches FROM Game, Team ");
    sqlToQuery.append("WHERE ( winner_id != ");
    sqlToQuery.append(team_id);
    sqlToQuery.append(" ) ");
    sqlToQuery.append("AND (( Team.id = Game.home_team_id AND Game.visitor_team_id = ");
    sqlToQuery.append(team_id);
    sqlToQuery.append(" ) ");
    sqlToQuery.append("OR ( Game.home_team_id = ");
    sqlToQuery.append(team_id);
    sqlToQuery.append(" AND Team.id = Game.visitor_team_id ))");
    sqlToQuery.append(
        " AND (( home_score=10 AND visitor_score=9 ) OR ( home_score=9 AND visitor_score=10 ))");
    sqlToQuery.append("GROUP BY Team.id ORDER BY count_matches DESC LIMIT 1;");

    ResultSet resultset = OpenFoosDatabase.executeQueryToFoosBase(sqlToQuery.toString());
    Team team = new Team();
    Statistic statistic = new Statistic();
    try {
      while (resultset.next()) {

        team.id = resultset.getLong("id");
        team.team_name = resultset.getString("team_name");
        team.image = resultset.getString("image");
        statistic.count_most_regular_appearances = resultset.getInt("count_matches");
      }
      resultset.close();
      if (team.id != null && team.team_name != null) {
        statistic.target_team = team;
      }
    } catch (SQLException e) {
      System.out.println(e.toString());
    }
    return statistic;
  }
  private Statistic getMostWonAgainst(Long team_id) {

    StringBuilder sqlToQuery =
        new StringBuilder(
            "SELECT DISTINCT Team.id, Team.team_name, Team.image,  count(*) AS count_matches FROM Team, Game ");
    sqlToQuery.append("WHERE ( winner_id = ");
    sqlToQuery.append(team_id);
    sqlToQuery.append(" ) ");
    sqlToQuery.append("AND (( Team.id = Game.home_team_id AND Game.visitor_team_id = ");
    sqlToQuery.append(team_id);
    sqlToQuery.append(" ) ");
    sqlToQuery.append("OR ( Game.home_team_id = ");
    sqlToQuery.append(team_id);
    sqlToQuery.append(" AND Team.id = Game.visitor_team_id ))");
    sqlToQuery.append("GROUP BY Team.id ORDER BY count_matches DESC LIMIT 1;");

    ResultSet resultset = OpenFoosDatabase.executeQueryToFoosBase(sqlToQuery.toString());
    Team team = new Team();
    Statistic statistic = new Statistic();
    try {
      while (resultset.next()) {

        team.id = resultset.getLong("id");
        team.team_name = resultset.getString("team_name");
        team.image = resultset.getString("image");
        statistic.count_most_won_against = resultset.getInt("count_matches");
      }
      resultset.close();
      if (team.id != null && team.team_name != null) {
        statistic.target_team = team;
      }
    } catch (SQLException e) {
    } finally {
    }
    return statistic;
  }
  private static String getLastThreeGameResult(Long team_id) {

    StringBuilder sqlToQuery = new StringBuilder("SELECT CASE winner_id ");
    sqlToQuery.append("WHEN ");
    sqlToQuery.append(team_id);
    sqlToQuery.append(" THEN 'W' ");
    sqlToQuery.append(" ELSE 'L' ");
    sqlToQuery.append(
        " END AS 'status' FROM Game WHERE ( Game.end_time != 0 ) AND ( home_team_id = ");
    sqlToQuery.append(team_id);
    sqlToQuery.append(" OR visitor_team_id = ");
    sqlToQuery.append(team_id);
    sqlToQuery.append(" ) ORDER BY id DESC LIMIT 3;");

    StringBuilder last_three_games_played = new StringBuilder();
    ResultSet resultset = OpenFoosDatabase.executeQueryToFoosBase(sqlToQuery.toString());

    try {

      while (resultset.next()) {

        last_three_games_played.append(resultset.getString(1));
        last_three_games_played.append(" / ");
      }
      resultset.close();

    } catch (SQLException e) {
      System.out.println(e.toString());
    }
    last_three_games_played.replace(
        last_three_games_played.toString().length() - 2,
        last_three_games_played.toString().length(),
        "");
    last_three_games_played.reverse();
    return last_three_games_played.toString();
  }
  public static Statistic getStatistics(Long team_id) {

    StringBuilder sqlToQuery =
        new StringBuilder("SELECT (SELECT SUM(home_score) from Game where home_team_id = ");
    sqlToQuery.append(team_id);
    sqlToQuery.append(" and end_time != 0) AS score_home_for, ");
    sqlToQuery.append("(SELECT SUM( visitor_score ) from Game where visitor_team_id = ");
    sqlToQuery.append(team_id);
    sqlToQuery.append(" and end_time != 0) AS score_away_for, ");
    sqlToQuery.append("(SELECT ( score_home_for + score_away_for )) AS score_for, ");
    sqlToQuery.append("(SELECT count(Game.id) FROM Game WHERE home_team_id = ");
    sqlToQuery.append(team_id);
    sqlToQuery.append(" and end_time != 0) AS home_games, ");
    sqlToQuery.append("(SELECT count(Game.id) FROM Game WHERE visitor_team_id = ");
    sqlToQuery.append(team_id);
    sqlToQuery.append(" and end_time != 0) AS away_games, ");
    sqlToQuery.append("(SELECT ( home_games + away_games )) AS games_playd, ");

    sqlToQuery.append("(SELECT count(Game.id) FROM Game WHERE winner_id = ");
    sqlToQuery.append(team_id);
    sqlToQuery.append(" and end_time != 0) AS winns, ");

    sqlToQuery.append("(SELECT count(Game.id) FROM Game WHERE winner_id = ");
    sqlToQuery.append(team_id);
    sqlToQuery.append(" and end_time != 0 and home_team_id = winner_id) AS home_wins, ");

    sqlToQuery.append("(SELECT count(Game.id) FROM Game WHERE winner_id = ");
    sqlToQuery.append(team_id);
    sqlToQuery.append(" and end_time != 0 and visitor_team_id = winner_id) AS away_wins, ");

    sqlToQuery.append("(SELECT (games_playd-winns)) as losts,  ");
    sqlToQuery.append(" (SELECT SUM(visitor_score) FROM Game WHERE home_team_id = ");
    sqlToQuery.append(team_id);
    sqlToQuery.append(" and end_time != 0) AS score_home_against, ");
    sqlToQuery.append("(SELECT SUM(home_score) FROM Game WHERE visitor_team_id = ");
    sqlToQuery.append(team_id);
    sqlToQuery.append(" and end_time != 0) as score_away_against, ");
    sqlToQuery.append("(select sum(score_home_against + score_away_against)) as score_against; ");

    ResultSet resultset = OpenFoosDatabase.executeQueryToFoosBase(sqlToQuery.toString());
    Statistic statistic = new Statistic();
    try {
      while (resultset.next()) {

        statistic.games_playd = resultset.getInt("games_playd");
        statistic.home_games = resultset.getInt("home_games");
        statistic.away_games = resultset.getInt("away_games");
        statistic.winns = resultset.getInt("winns");
        statistic.losts = resultset.getInt("losts");

        statistic.home_wins = resultset.getInt("home_wins");
        statistic.away_wins = resultset.getInt("away_wins");

        statistic.score_for = resultset.getInt("score_for");
        statistic.score_home_for = resultset.getInt("score_home_for");
        statistic.score_away_for = resultset.getInt("score_away_for");
        if (statistic.score_for == 0 && statistic.score_home_for != 0) {
          statistic.score_for = statistic.score_home_for;
        }
        if (statistic.score_for == 0 && statistic.score_away_for != 0) {
          statistic.score_for = statistic.score_away_for;
        }
        statistic.score_against = resultset.getInt("score_against");
        statistic.score_home_against = resultset.getInt("score_home_against");
        statistic.score_away_against = resultset.getInt("score_away_against");

        if (statistic.score_against == 0 && statistic.score_home_against != 0) {
          statistic.score_against = statistic.score_home_against;
        }
        if (statistic.score_against == 0 && statistic.score_away_against != 0) {
          statistic.score_against = statistic.score_away_against;
        }

        // If team have played any home game's?
        if (statistic.home_games > 0) {

          // if team have won at home, then home lost must be home games - home wins
          if (statistic.home_wins > 0) {
            statistic.home_lost = statistic.home_games - statistic.home_wins;
          }
          // if team have not won at home, but played at home then home lost must be count home
          // games.
          if (statistic.home_wins == 0) {
            statistic.home_lost = statistic.home_games;
          }
        }

        // The same for away
        if (statistic.away_games > 0) {

          if (statistic.away_wins > 0) {
            statistic.away_lost = statistic.away_games - statistic.away_wins;
          }

          if (statistic.away_wins == 0) {
            statistic.away_lost = statistic.away_games;
          }
        }
      }
      resultset.close();
    } catch (SQLException e) {
      System.out.println(e.toString());
    } catch (Exception e) {
      System.out.println(e.toString());
    }

    if (statistic.games_playd >= 1) {

      statistic.average_score_for = (int) (statistic.score_for / statistic.games_playd);

      statistic.average_score_against = (int) (statistic.score_against / statistic.games_playd);

      statistic.average_score_difference =
          statistic.average_score_for - statistic.average_score_against;

      statistic.score_difference = statistic.score_for - statistic.score_against;

      statistic.win_prosent = (statistic.winns * 100) / statistic.games_playd;

      statistic.lost_prosent = (100 - statistic.win_prosent);

      statistic.last_three_games_played = getLastThreeGameResult(team_id);
    }

    return statistic;
  }