
from jupyter_server.services.config.manager import ConfigManager


DEFAULT_SECTION_NAME = "jupyter_server_config"


class ExtensionConfigManager(ConfigManager):
    """A manager class to interface with Jupyter Server Extension config
    found in a `config.d` folder. It is assumed that all configuration
    files in this directory are JSON files.
    """
    def get_jpserver_extensions(
        self,
        section_name=DEFAULT_SECTION_NAME
    ):
        """Return the jpserver_extensions field from all
        config files found."""
        data = self.get(section_name)
        return (
            data
            .get("ServerApp", {})
            .get("jpserver_extensions", {})
        )

    def enabled(
        self,
        name,
        section_name=DEFAULT_SECTION_NAME,
        include_root=True
    ):
        """Is the extension enabled?"""
        extensions = self.get_jpserver_extensions(section_name)
        try:
            return extensions[name]
        except KeyError:
            return False

    def enable(self, name):
        data = {
            "ServerApp": {
                "jpserver_extensions": {
                    name: True
                }
            }
        }
        self.update(name, data)

    def disable(self, name):
        data = {
            "ServerApp": {
                "jpserver_extensions": {
                    name: False
                }
            }
        }
        self.update(name, data)
