[docs]classDebateState(MultiPlayerGameState):"""State model for debate-style interactions."""# Core elementstopic:Topic=Field(...,description="The topic being debated")participants:dict[str,Participant]=Field(default_factory=dict,description="Debate participants")statements:list[Statement]=Field(default_factory=list,description="History of statements")current_speaker_idx:int=Field(0,description="Index of the current speaker")# Phase managementdebate_phase:str=Field(DebatePhase.SETUP,description="Current debate phase")phase_time_limit:int|None=Field(None,description="Time limit for current phase")phase_statement_limit:int|None=Field(None,description="Maximum statements in phase")# Voting and scoringvotes:dict[str,list[Vote]]=Field(default_factory=dict,description="Votes from participants")scores:dict[str,float]=Field(default_factory=dict,description="Current participant scores")# Moderation controlsinterruptions_allowed:bool=Field(False,description="Whether interruptions are allowed")moderator_id:str|None=Field(None,description="ID of the moderator if any")moderation_notes:list[str]=Field(default_factory=list,description="Moderation notes")# Format-specific fieldstime_remaining:dict[str,int]=Field(default_factory=dict,description="Time remaining per participant")turn_order:list[str]=Field(default_factory=list,description="Order of turns if not round-robin")@propertydefcurrent_speaker(self)->str:"""Get the current speaker's ID."""if0<=self.current_speaker_idx<len(self.turn_order):returnself.turn_order[self.current_speaker_idx]return""