from fastapi import APIRouter, HTTPException, status from adapters.registry import GameAdapterRegistry router = APIRouter(prefix="/games", tags=["games"]) def _ok(data): return {"success": True, "data": data, "error": None} @router.get("") def list_games(): return _ok(GameAdapterRegistry.list_game_types()) @router.get("/{game_type}") def get_game(game_type: str): try: adapter = GameAdapterRegistry.get(game_type) except KeyError: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail={"code": "GAME_TYPE_NOT_FOUND", "message": f"Unknown game type: {game_type}"}, ) caps = [] for cap in ["config_generator", "process_config", "log_parser", "remote_admin", "mission_manager", "mod_manager", "ban_manager"]: if adapter.has_capability(cap): caps.append(cap) config_gen = adapter.get_config_generator() sections = list(config_gen.get_sections().keys()) process_config = adapter.get_process_config() return _ok({ "game_type": adapter.game_type, "display_name": adapter.display_name, "version": adapter.version, "schema_version": config_gen.get_config_version(), "capabilities": caps, "config_sections": sections, "allowed_executables": process_config.get_allowed_executables(), }) @router.get("/{game_type}/config-schema") def get_config_schema(game_type: str): try: adapter = GameAdapterRegistry.get(game_type) except KeyError: raise HTTPException(status_code=404, detail={"code": "GAME_TYPE_NOT_FOUND"}) config_gen = adapter.get_config_generator() schemas = {} for section, model_cls in config_gen.get_sections().items(): schemas[section] = model_cls.model_json_schema() return _ok(schemas) @router.get("/{game_type}/defaults") def get_defaults(game_type: str): try: adapter = GameAdapterRegistry.get(game_type) except KeyError: raise HTTPException(status_code=404, detail={"code": "GAME_TYPE_NOT_FOUND"}) config_gen = adapter.get_config_generator() defaults = {} for section in config_gen.get_sections(): defaults[section] = config_gen.get_defaults(section) return _ok(defaults)