import os
from pathlib import Path
from typing import Optional
import json


CONFIG_DIR = Path(__file__).parent.parent / ".config"
CONFIG_FILE = CONFIG_DIR / "settings.json"


def ensure_config_dir():
    CONFIG_DIR.mkdir(parents=True, exist_ok=True)
    gitignore = CONFIG_DIR.parent / ".gitignore"
    if not gitignore.exists():
        gitignore.write_text("# Secrets\n.config/\n.env\n")


def load_config() -> dict:
    if CONFIG_FILE.exists():
        with open(CONFIG_FILE, "r") as f:
            return json.load(f)
    return {}


def save_config(config: dict):
    ensure_config_dir()
    with open(CONFIG_FILE, "w") as f:
        json.dump(config, f, indent=2)


def get_api_key(provider: str = "zai") -> Optional[str]:
    env_var = f"{provider.upper()}_API_KEY"
    key = os.environ.get(env_var)
    if key:
        return key

    config = load_config()
    return config.get("api_keys", {}).get(provider)


def set_api_key(key: str, provider: str = "zai"):
    config = load_config()
    if "api_keys" not in config:
        config["api_keys"] = {}
    config["api_keys"][provider] = key
    save_config(config)
