from typing import Callable, Optional

from legendary.core import LegendaryCore
from legendary.utils.config import LGDConf

_config: Optional[LGDConf] = None
_save_config: Optional[Callable[[], None]] = None


def init_config_handler(core: LegendaryCore):
    global _config, _save_config
    _config = core.lgd.config
    _save_config = core.lgd.save_config


def save_config():
    if _save_config is None:
        raise RuntimeError("Uninitialized use of config_helper")
    _save_config()


def add_option(app_name: str, option: str, value: str):
    value = value.replace("%%", "%").replace("%", "%%")
    if not _config.has_section(app_name):
        _config[app_name] = {}

    _config.set(app_name, option, value)
    save_config()


def remove_option(app_name, option):
    if _config.has_option(app_name, option):
        _config.remove_option(app_name, option)

    if _config.has_section(app_name) and not _config[app_name]:
        _config.remove_section(app_name)

    save_config()


def remove_section(app_name):
    if _config.has_section(app_name):
        _config.remove_section(app_name)
        save_config()
