from app.main.data_model.games.finedge.fe_ranking import FERanking
from app.main.data_model.games.finedge.fe_portfolio import FEPortfolio
from sqlalchemy import func


class FERankingRepository:
    def __init__(self, session):
        self.session = session

    def get_ranking_by_id(self, ranking_id):
        ranking = self.session.query(FERanking).filter(FERanking.id == ranking_id).all()
        if len(ranking) == 0:
            return None
        return ranking[0]

    def get_rankings(self, game_session_id):
        last_date = self.session.query(func.max(FERanking.market_date)).join(FEPortfolio).filter(
            FERanking.portfolio_id == FEPortfolio.id,
            FEPortfolio.game_session_id == game_session_id
        )
        rankings = self.session.query(FERanking).join(FEPortfolio).filter(
            FERanking.market_date == last_date,
            FERanking.portfolio_id == FEPortfolio.id,
            FEPortfolio.game_session_id == game_session_id).all()
        if len(rankings) == 0:
            return None
        return rankings

    def get_historical_rankings(self, game_session_id):
        rankings = self.session.query(FERanking).join(FEPortfolio).filter(
            FERanking.portfolio_id == FEPortfolio.id,
            FEPortfolio.game_session_id == game_session_id).all()
        if len(rankings) == 0:
            return []
        return rankings
