from __future__ import annotations

from dataclasses import dataclass


@dataclass
class IconPack:
    name: str
    symbols: dict[str, str]

    def get(self, key: str, default: str = '') -> str:
        return self.symbols.get(key, default)


EMOJI = IconPack('emoji', {
    'app': '🪺', 'tab': '📑', 'section': '🧩', 'button': '🚀', 'toggle_on': '🟢', 'toggle_off': '⚪',
    'input': '⌨️', 'select': '🧭', 'text': '📝', 'paragraph': '📄', 'divider': '➖', 'badge': '🏷️',
    'progress': '📊', 'table': '🗃️', 'logger': '📜', 'log_viewer': '📚', 'command_palette': '⚡',
    'notice': '🔔', 'success': '✅', 'warning': '⚠️', 'danger': '❌', 'info': 'ℹ️', 'help': '🆘',
    'save': '💾', 'load': '📂', 'theme': '🎨', 'quit': '🛑', 'list': '🧾', 'tree': '🌲', 'clock': '🕒',
    'form': '🧩', 'plugin': '🧱', 'voice': '🎙️', 'status_table': '🛰️', 'online': '🟢', 'offline': '🔴',
    'context': '📌', 'settings': '⚙️', 'file': '📁', 'terminal': '🖥️', 'json': '🧬', 'stats': '📈',
    'task': '🛠️', 'process': '🧪', 'port': '🔌', 'health': '❤️', 'schedule': '🗓️', 'profile': '🪪',
    'multiselect': '☑️', 'clipboard': '📋', 'mouse': '🖱️', 'subtabs': '🗂️', 'wizard': '🪄',
    'sparkle': '✨', 'search': '🔎', 'folder_open': '📂', 'workspace': '🧰', 'shield': '🛡️', 'assistant': '🧠', 'transcript': '🗣️', 'mic_live': '🎤', 'voice_reply': '🔊',
    'rocket': '🚀', 'server': '🖧', 'web': '🌐', 'bot': '🤖', 'api': '🔗', 'folder': '🗂️',
    'star': '⭐', 'heart': '💖', 'bolt': '⚡', 'gear': '⚙️', 'window': '🪟'
})

ASCII = IconPack('ascii', {
    'app': '[*]', 'tab': '[TAB]', 'section': '[SEC]', 'button': '[BTN]', 'toggle_on': '[ON]', 'toggle_off': '[OFF]',
    'input': '[IN]', 'select': '[SEL]', 'text': '[TXT]', 'paragraph': '[DOC]', 'divider': '-----', 'badge': '[TAG]',
    'progress': '[PRG]', 'table': '[TBL]', 'logger': '[LOG]', 'log_viewer': '[LOGS]', 'command_palette': '[CMD]',
    'notice': '[!]', 'success': '[OK]', 'warning': '[WARN]', 'danger': '[ERR]', 'info': '[i]', 'help': '[?]',
    'save': '[SAVE]', 'load': '[LOAD]', 'theme': '[THEME]', 'quit': '[QUIT]', 'list': '[LIST]', 'tree': '[TREE]',
    'clock': '[TIME]', 'form': '[FORM]', 'plugin': '[PLUG]', 'voice': '[MIC]', 'status_table': '[STAT]', 'online': '[ON]', 'offline': '[OFF]',
    'context': '[CTX]', 'settings': '[CFG]', 'file': '[FILE]', 'terminal': '[TERM]', 'json': '[JSON]', 'stats': '[KV]',
    'task': '[TASK]', 'process': '[PROC]', 'port': '[PORT]', 'health': '[HEALTH]', 'schedule': '[CAL]', 'profile': '[PROF]',
    'multiselect': '[MULTI]', 'clipboard': '[COPY]', 'mouse': '[MOUSE]', 'subtabs': '[SUB]', 'wizard': '[GUIDE]',
    'sparkle': '[*]', 'search': '[SEARCH]', 'folder_open': '[OPEN]', 'workspace': '[WORK]', 'shield': '[SAFE]', 'assistant': '[AI]', 'transcript': '[SAY]', 'mic_live': '[MIC]', 'voice_reply': '[SPK]',
    'rocket': '[GO]', 'server': '[SRV]', 'web': '[WEB]', 'bot': '[BOT]', 'api': '[API]', 'folder': '[DIR]',
    'star': '[STAR]', 'heart': '[HEART]', 'bolt': '[BOLT]', 'gear': '[GEAR]', 'window': '[WIN]'
})

PACKS = {'emoji': EMOJI, 'ascii': ASCII, 'off': ASCII}


def get_icon_pack(name: str | None) -> IconPack:
    return PACKS.get((name or 'emoji').lower(), EMOJI)
