"""Build Mode Editor — управление режимами сборки""" import os import json import logging from datetime import datetime from typing import Dict from .config import BUILD_MODES_FILE class BuildModeEditor: def __init__(self, state): self.state = state self.logger = logging.getLogger(__name__) def list_modes(self) -> str: modes = self._load_all_modes() if not modes: return ( "╭───────────────────╮\n" " │ 🗃️ ᴀʀᴄʜɪᴠᴇ ᴏғ ʙᴜɪʟᴅ ᴍᴏᴅᴇs │\n" "╰───────────────────╯\n\n" "⊘ Empty...\n" "Create your first mode: `/build mode save `" ) lines = ["╭───────────────────────────╮\n │ 🗃️ ᴀʀᴄʜɪᴠᴇ ᴏғ ʙᴜɪʟᴅ ᴍᴏᴅᴇs │\n╰───────────────────────────╯\n"] for name, config in modes.items(): desc = config.get('description', 'No description') lines.append(f"▸ {name}: {desc[:50]}...") return "\n".join(lines) def show_mode(self, mode_name: str) -> str: modes = self._load_all_modes() mode = modes.get(mode_name) if not mode: return f"▸ ✗ ᴇʀʀᴏʀ\n『{mode_name}』 not found in the archive.\nCheck spelling: `/build mode list`" return ( f"╭───────────────────╮\n" f" │ 📋 {mode_name.upper()} ᴍᴏᴅᴇ │\n" "├───────────────────┤\n" f"```json\n{json.dumps(mode, ensure_ascii=False, indent=2)}\n```" ) def save_mode(self, mode_name: str, config: Dict = None) -> str: modes = self._load_all_modes() if config is None: config = dict(self.state.build_context) config["description"] = f"Mode created {datetime.now().isoformat()}" modes[mode_name] = config try: with open(BUILD_MODES_FILE, "w", encoding="utf-8") as f: json.dump(modes, f, ensure_ascii=False, indent=2) return f"▸ ✓ ᴅɪᴅ sᴀᴠᴇ\n『{mode_name}』 saved to archive.\nLoad it anytime: `/build mode load {mode_name}`" except Exception as e: self.logger.error(f"Failed to save mode {mode_name}: {e}") return f"▸ ⚠️ ᴇʀʀᴏʀ\n『{mode_name}』 save failed: {str(e)[:100]}..." def load_mode(self, mode_name: str) -> str: modes = self._load_all_modes() mode = modes.get(mode_name) if not mode: return f"▸ ✗ ᴇʀʀᴏʀ\n『{mode_name}』 not found in the archive." self.state.build_context.update(mode) return f"▸ ✓ ᴍᴏᴅᴇ ʟᴏᴀᴅᴇᴅ\n『{mode_name}』 activated." def delete_mode(self, mode_name: str) -> str: modes = self._load_all_modes() if mode_name not in modes: return f"▸ ✗ ᴇʀʀᴏʀ\n『{mode_name}』 not found. Nothing to delete." del modes[mode_name] try: with open(BUILD_MODES_FILE, "w", encoding="utf-8") as f: json.dump(modes, f, ensure_ascii=False, indent=2) return f"▸ ☢️ ᴅᴇʟᴇᴛᴇᴅ\n『{mode_name}』 removed from archive." except Exception as e: self.logger.error(f"Failed to delete mode {mode_name}: {e}") return f"▸ ⚠️ ᴇʀʀᴏʀ\n『{mode_name}』 deletion failed: {str(e)[:100]}..." def _load_all_modes(self) -> Dict: if not os.path.exists(BUILD_MODES_FILE): return {} try: with open(BUILD_MODES_FILE, "r", encoding="utf-8") as f: return json.load(f) except Exception as e: self.logger.error(f"Failed to load build modes: {e}") return {}