"""
Configuration loader for VideoDetection.
"""
from __future__ import annotations

import json
from pathlib import Path
from typing import Any, Dict

from .paths import APP_ROOT

DEFAULT_CONFIG_PATH = APP_ROOT / "config.yaml"


def load_yaml_simple(file_path: Path) -> Dict[str, Any]:
    """Đọc file YAML bằng PyYAML nếu có, hoặc parse an toàn."""
    try:
        import yaml
        with open(file_path, "r", encoding="utf-8") as f:
            return yaml.safe_load(f) or {}
    except ImportError:
        # Fallback parser đơn giản nếu chưa cài PyYAML
        data: Dict[str, Any] = {}
        current_section = None
        with open(file_path, "r", encoding="utf-8") as f:
            for line in f:
                line = line.strip()
                if not line or line.startswith("#"):
                    continue
                if ":" in line and not line.startswith("-"):
                    parts = line.split(":", 1)
                    key = parts[0].strip()
                    val = parts[1].split("#")[0].strip()
                    if not val:
                        current_section = key
                        data[current_section] = {}
                    else:
                        parsed_val: Any = val.strip("\"'")
                        if parsed_val.lower() == "true":
                            parsed_val = True
                        elif parsed_val.lower() == "false":
                            parsed_val = False
                        else:
                            try:
                                if "." in parsed_val:
                                    parsed_val = float(parsed_val)
                                else:
                                    parsed_val = int(parsed_val)
                            except ValueError:
                                pass
                        if current_section:
                            data[current_section][key] = parsed_val
                        else:
                            data[key] = parsed_val
        return data


class AppConfig:
    def __init__(self, config_path: Path = DEFAULT_CONFIG_PATH) -> None:
        self.config_path = config_path
        self.raw_data: Dict[str, Any] = {}
        self.reload()

    def reload(self) -> None:
        if self.config_path.exists():
            self.raw_data = load_yaml_simple(self.config_path)
        else:
            self.raw_data = {}

    def get(self, section: str, key: str, default: Any = None) -> Any:
        return self.raw_data.get(section, {}).get(key, default)

    @property
    def hardware(self) -> Dict[str, Any]:
        return self.raw_data.get("hardware", {})

    @property
    def visual(self) -> Dict[str, Any]:
        return self.raw_data.get("visual", {})

    @property
    def audio(self) -> Dict[str, Any]:
        return self.raw_data.get("audio", {})

    @property
    def alignment(self) -> Dict[str, Any]:
        return self.raw_data.get("alignment", {})

    @property
    def ui(self) -> Dict[str, Any]:
        return self.raw_data.get("ui", {})


CONFIG = AppConfig()
