"""Test OAuth store integration with config loading."""
import json
import pytest
import tempfile
from pathlib import Path
from nanobot.config.loader import load_config
from nanobot.config.oauth_store import OAuthStore
from nanobot.config.schema import OAuthCredentials


def test_oauth_token_injected_into_config(tmp_path, monkeypatch):
    """OAuth token from store should be injected into provider api_key."""
    # Create a minimal config file (no api key set)
    config_path = tmp_path / "config.json"
    config_path.write_text(json.dumps({
        "agents": {"defaults": {"model": "anthropic/claude-opus-4-5"}},
        "providers": {"anthropic": {"apiKey": ""}}
    }))

    # Save OAuth credentials
    store = OAuthStore(tmp_path)
    creds = OAuthCredentials(access_token="sk-ant-oat01-test-inject")
    store.save("anthropic", creds)

    # Monkeypatch get_config_path to use our tmp dir
    monkeypatch.setattr("nanobot.config.loader.get_config_path", lambda: config_path)
    # Monkeypatch the OAuth store path
    monkeypatch.setattr("nanobot.config.loader._get_oauth_store_dir", lambda: tmp_path)

    config = load_config(config_path)

    assert config.providers.anthropic.api_key == "sk-ant-oat01-test-inject"


def test_config_without_oauth_unchanged(tmp_path, monkeypatch):
    """Config without OAuth store should load normally."""
    config_path = tmp_path / "config.json"
    config_path.write_text(json.dumps({
        "providers": {"anthropic": {"apiKey": "sk-ant-api03-regular"}}
    }))

    monkeypatch.setattr("nanobot.config.loader._get_oauth_store_dir", lambda: tmp_path / "nonexistent")

    config = load_config(config_path)

    assert config.providers.anthropic.api_key == "sk-ant-api03-regular"


def test_oauth_does_not_overwrite_existing_key(tmp_path, monkeypatch):
    """If user already has an API key, OAuth should still override (OAuth takes priority)."""
    config_path = tmp_path / "config.json"
    config_path.write_text(json.dumps({
        "providers": {"anthropic": {"apiKey": "sk-ant-api03-existing"}}
    }))

    store = OAuthStore(tmp_path)
    creds = OAuthCredentials(access_token="sk-ant-oat01-oauth-wins")
    store.save("anthropic", creds)

    monkeypatch.setattr("nanobot.config.loader._get_oauth_store_dir", lambda: tmp_path)

    config = load_config(config_path)

    # OAuth token takes priority over existing API key
    assert config.providers.anthropic.api_key == "sk-ant-oat01-oauth-wins"
