File size: 4,080 Bytes
feef734
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
"""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 <name>`"
            )
        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 {}