require "test_helper"

class VectorStore::RegistryTest < ActiveSupport::TestCase
  test "adapter_name defaults to openai when access token present" do
    VectorStore::Registry.stubs(:openai_access_token).returns("sk-test")
    ClimateControl.modify(VECTOR_STORE_PROVIDER: nil) do
      assert_equal :openai, VectorStore::Registry.adapter_name
    end
  end

  test "adapter_name returns nil when no credentials configured" do
    VectorStore::Registry.stubs(:openai_access_token).returns(nil)
    ClimateControl.modify(VECTOR_STORE_PROVIDER: nil) do
      assert_nil VectorStore::Registry.adapter_name
    end
  end

  test "adapter_name respects explicit VECTOR_STORE_PROVIDER" do
    ClimateControl.modify(VECTOR_STORE_PROVIDER: "qdrant") do
      assert_equal :qdrant, VectorStore::Registry.adapter_name
    end
  end

  test "adapter_name falls back to openai for unknown provider" do
    VectorStore::Registry.stubs(:openai_access_token).returns("sk-test")
    ClimateControl.modify(VECTOR_STORE_PROVIDER: "unknown_store") do
      assert_equal :openai, VectorStore::Registry.adapter_name
    end
  end

  test "adapter returns VectorStore::Openai instance when openai configured" do
    VectorStore::Registry.stubs(:openai_access_token).returns("sk-test")
    ClimateControl.modify(VECTOR_STORE_PROVIDER: nil) do
      adapter = VectorStore::Registry.adapter
      assert_instance_of VectorStore::Openai, adapter
    end
  end

  test "adapter returns nil when nothing configured" do
    VectorStore::Registry.stubs(:openai_access_token).returns(nil)
    ClimateControl.modify(VECTOR_STORE_PROVIDER: nil) do
      assert_nil VectorStore::Registry.adapter
    end
  end

  test "adapter returns VectorStore::Pgvector instance when pgvector configured" do
    ClimateControl.modify(VECTOR_STORE_PROVIDER: "pgvector") do
      adapter = VectorStore::Registry.adapter
      assert_instance_of VectorStore::Pgvector, adapter
    end
  end

  test "configured? delegates to adapter presence" do
    VectorStore::Registry.stubs(:adapter).returns(nil)
    assert_not VectorStore.configured?

    VectorStore::Registry.stubs(:adapter).returns(VectorStore::Openai.new(access_token: "sk-test"))
    assert VectorStore.configured?
  end
end
