from app.main.data_model.games.leadedge.le_round import LERound
from app.main.data_model.games.leadedge.le_round_scenario import LERoundScenario


class LERoundScenarioRepository:

    def __init__(self, session):
        self.session = session

    def get_round_scenario_by_id(self, round_scenario_id):
        return self.session.query(LERoundScenario).filter(
            LERoundScenario.id == round_scenario_id
        ).first()

    def find_round_scenarios_by_round_id(self, round_id, is_equilibrium):
        return self.session.query(LERoundScenario).filter(
            LERoundScenario.is_equilibrium == is_equilibrium,
            LERoundScenario.le_round_id == round_id
        ).all()

    def find_last_equilibrium(self, round_id, game_session_id):
        return self.session.query(LERoundScenario).join(LERound).filter(
            LERoundScenario.is_equilibrium == 1,
            LERoundScenario.le_round_id == LERound.id,
            LERound.game_session_id == game_session_id,
            LERoundScenario.le_round_id < round_id
        ).order_by(LERoundScenario.id.desc()).first()

    def get_round_scenarios_owned_by_company_id(self, round_id, company_id):
        return self.session.query(LERoundScenario).filter(
            LERoundScenario.is_equilibrium == 0,
            LERoundScenario.le_company_owner_id == company_id,
            LERoundScenario.le_round_id == round_id
        ).all()

    def get_decision_scenario_for_company_and_round(self, round_id, company_id):
        return self.session.query(LERoundScenario).filter(
            LERoundScenario.is_equilibrium == 0,
            LERoundScenario.is_decision == 1,
            LERoundScenario.le_company_owner_id == company_id,
            LERoundScenario.le_round_id == round_id
        ).first()

    def delete_round_scenario(self, round_scenario_id):
        self.session.query(LERoundScenario).filter(LERoundScenario.id == round_scenario_id).delete()
        self.session.flush()

    def get_round_decision_scenarios(self, round_id):
        return self.session.query(LERoundScenario).filter(
            LERoundScenario.is_equilibrium == 0,
            LERoundScenario.is_decision == 1,
            LERoundScenario.le_round_id == round_id
        ).all()





