from app.main.data_model.games.stratedge.se_round_scenario import SERoundScenario
from app.main.data_model.games.stratedge.se_round import SERound
from app.main.util import helpers


class RoundScenarioRepository:

    def __init__(self, session):
        self.session = session

    def get_round_scenario_by_id(self, round_scenario_id):
        round_scenario = self.session.query(SERoundScenario).filter(SERoundScenario.id == round_scenario_id).all()
        if len(round_scenario) == 0:
            return None
        return round_scenario[0]

    def get_decision_scenario(self, round_id, owner_team_id):
        round_scenario = self.session.query(SERoundScenario).filter(SERoundScenario.round_id == round_id).\
            filter(SERoundScenario.owner_team_id == owner_team_id).filter(SERoundScenario.is_decision == 1).all()
        if len(round_scenario) == 0:
            return None
        return round_scenario[0]

    def get_decision_scenarios(self, round_id):
        round_scenarios = self.session.query(SERoundScenario).filter(
            SERoundScenario.round_id == round_id,
            SERoundScenario.is_decision == 1).all()
        if len(round_scenarios) == 0:
            return None
        return round_scenarios

    def get_scenarios_by_team_id_and_round_id(self, owner_team_id, round_id):
        round_scenarios = self.session.query(SERoundScenario).filter(SERoundScenario.round_id == round_id). \
            filter(SERoundScenario.owner_team_id == owner_team_id).all()
        if len(round_scenarios) == 0:
            return None
        return round_scenarios

    def get_aggregated_round_scenarios(self, game_session_id):
        round_scenarios = self.session.query(SERoundScenario).join(SERound).filter(SERoundScenario.round_id == SERound.id). \
            filter(SERound.game_session_id == game_session_id).\
            filter(SERoundScenario.owner_team_id.is_(None)).all()
        if len(round_scenarios) == 0:
            return None
        return round_scenarios

    def get_aggregated_round_scenario(self, game_session_id, round_id):
        round_scenario = self.session.query(SERoundScenario).join(SERound).filter(SERoundScenario.round_id == SERound.id). \
            filter(SERound.game_session_id == game_session_id). \
            filter(SERound.id == round_id).filter(SERoundScenario.owner_team_id.is_(None)).all()
        if len(round_scenario) == 0:
            return None
        return round_scenario

    def delete_round_scenarios_by_round_id(self, round_id):

        round_scenarios = self.session.query(SERoundScenario).filter(
            SERoundScenario.round_id == round_id
        ).all()
        if round_scenarios is None:
            return
        helpers.delete(self.session, round_scenarios)
