"""bqetl_project.yaml config loader."""

from pathlib import Path

import yaml

ROOT = Path(__file__).parent.parent
BQETL_PROJECT_CONFIG = "bqetl_project.yaml"


class _ConfigLoader:
    project_dir: Path = ROOT
    config_file: str = BQETL_PROJECT_CONFIG

    @property
    def config(self):
        config = getattr(self, "_config", None)
        if config:
            return config

        self._config = yaml.safe_load((self.project_dir / self.config_file).read_text())
        return self._config

    def set_project_dir(self, project_dir: Path):
        """Update the project root directory."""
        self.project_dir = project_dir

    def set_config_file(self, config_file: str):
        """Update the project root directory."""
        self.config_file = config_file

    def get(self, *args, fallback=None):
        """Get the config option specified by args."""
        conf = self.config

        for arg in args:
            if arg in conf:
                conf = conf[arg]
            else:
                return fallback

        return conf


ConfigLoader = _ConfigLoader()
