from __future__ import annotations from typing import List from warchron.constants import ContextType from warchron.model.tie_manager import ResolutionContext from warchron.model.war import War from warchron.model.campaign import Campaign from warchron.model.round import Round class ClosureService: @staticmethod def close_round(round: Round) -> List[ResolutionContext]: if not round.all_battles_finished(): raise RuntimeError("All battles must be finished to close their round") ties = [] for battle in round.battles.values(): if battle.is_draw(): participants: list[str] = [] if battle.player_1_id is not None: participants.append(battle.player_1_id) if battle.player_2_id is not None: participants.append(battle.player_2_id) ties.append( ResolutionContext( context_type=ContextType.BATTLE, context_id=battle.sector_id, # TODO ref to War.participants at some point participant_ids=participants, ) ) if ties: return ties round.is_over = True return [] @staticmethod def close_campaign(campaign: Campaign) -> List[ResolutionContext]: if not campaign.all_rounds_finished(): raise RuntimeError("All rounds must be finished to close their campaign") ties: List[ResolutionContext] = [] # for round in campaign.rounds: # # compute score # # if participants have same score # ties.append( # ResolutionContext( # context_type=ContextType.CAMPAIGN, # context_id=campaign.id, # participant_ids=[ # # TODO ref to War.participants at some point # campaign.participants[campaign_participant_id], # campaign.participants[campaign_participant_id], # ], # ) # ) if ties: return ties campaign.is_over = True return [] @staticmethod def close_war(war: War) -> List[ResolutionContext]: if not war.all_campaigns_finished(): raise RuntimeError("All campaigns must be finished to close their war") ties: List[ResolutionContext] = [] # for campaign in war.campaigns: # # compute score # # if participants have same score # ties.append( # ResolutionContext( # context_type=ContextType.WAR, # context_id=war.id, # participant_ids=[ # war.participants[war_participant_id], # war.participants[war_participant_id], # ], # ) # ) if ties: return ties war.is_over = True return []