# markdownconverter/utils/config.py

import json
from pathlib import Path

# Definisci i percorsi basati sulla posizione del file
APP_ROOT_DIR = Path(__file__).parent.parent.parent
CONFIG_DIR = APP_ROOT_DIR / "config"
CONFIG_FILE = CONFIG_DIR / "app_config.json"

# Costanti per le chiavi del dizionario
KEY_LAST_MARKDOWN = "last_markdown_file"
KEY_LAST_PROFILE = "last_selected_profile"
KEY_PROFILES = "profiles"
KEY_TEMPLATE_PATH = "template_path"
KEY_VALUES = "values"


def get_default_config() -> dict:
    """Restituisce la struttura di configurazione predefinita."""
    return {
        KEY_LAST_MARKDOWN: "",
        KEY_LAST_PROFILE: "",
        KEY_PROFILES: {}
    }


def save_configuration(config_data: dict):
    """Salva il dizionario di configurazione nel file JSON."""
    try:
        CONFIG_DIR.mkdir(exist_ok=True)
        with open(CONFIG_FILE, "w", encoding="utf-8") as f:
            json.dump(config_data, f, indent=4)
    except IOError as e:
        print(f"Error saving configuration: {e}")


def load_configuration() -> dict:
    """Carica la configurazione dal file JSON."""
    defaults = get_default_config()
    if not CONFIG_FILE.is_file():
        return defaults

    try:
        with open(CONFIG_FILE, "r", encoding="utf-8") as f:
            loaded_config = json.load(f)
            
            # Assicura solo la presenza delle chiavi di primo livello
            for key, default_value in defaults.items():
                loaded_config.setdefault(key, default_value)
            
            return loaded_config
            
    except (json.JSONDecodeError, IOError) as e:
        print(f"Error loading or parsing config file: {e}. Returning default config.")
        return defaults