"""셀프 호스팅 Opik 연결 유닛 (2026-08-14) — 주소만으로 켜지는지.

클라우드 키가 없어도(셀프 호스팅 무인증) opik_url_override 만으로 콜백이
켜지고 SDK 가 읽는 환경 변수가 올라가야 한다. 실행 중 백엔드와 무관한
별도 프로세스 검증.
"""
import os

import app.modules.llm.llm_client as lc


def _reset(monkeypatch):
    monkeypatch.setattr(lc, "_opik_initialized", False)
    for k in ("OPIK_API_KEY", "OPIK_URL_OVERRIDE",
              "OPIK_WORKSPACE", "OPIK_PROJECT_NAME"):
        monkeypatch.delenv(k, raising=False)


def test_url_only_enables_callback(monkeypatch):
    _reset(monkeypatch)
    from app.core.config import settings
    monkeypatch.setattr(settings, "opik_api_key", "")
    monkeypatch.setattr(settings, "opik_url_override",
                        "http://127.0.0.1:15173/api")
    monkeypatch.setattr(settings, "opik_workspace", "default")
    lc._init_opik()
    assert os.environ["OPIK_URL_OVERRIDE"] == "http://127.0.0.1:15173/api"
    assert os.environ["OPIK_WORKSPACE"] == "default"
    assert "OPIK_API_KEY" not in os.environ
    assert lc.litellm.callbacks and "opik" in [
        getattr(c, "__name__", c) for c in lc.litellm.callbacks]


def test_neither_key_nor_url_disables(monkeypatch):
    _reset(monkeypatch)
    from app.core.config import settings
    monkeypatch.setattr(settings, "opik_api_key", "")
    monkeypatch.setattr(settings, "opik_url_override", "")
    lc._init_opik()
    assert "OPIK_URL_OVERRIDE" not in os.environ
    assert "OPIK_PROJECT_NAME" not in os.environ
