Feature: Vector Store Service
  As a developer
  I want deterministic semantic search helpers
  So that vector store functionality stays well-covered

  Scenario: Refresh rejects when vector store is disabled
    Given a vector store service with search disabled
    When I attempt to refresh the vector store for plan 1
    Then a configuration error should mention disabled vector store support

  Scenario: Search rejects when vector store is disabled
    Given a vector store service with search disabled
    When I search plan 1 with the query "Need answers" and limit 1
    Then a configuration error should mention disabled vector store support

  Scenario: Refresh removes cache and persisted files when contexts are empty
    Given a vector store service with search enabled
    And FAISS interactions are recorded
    And plan 7 cache contains similarity results
    And plan 7 already has persisted FAISS files
    And plan 7 has no context documents
    When I refresh the vector store for plan 7
    Then the refresh result should be 0 documents
    And the plan 7 cache should be empty
    And the plan 7 persisted files should be removed

  Scenario: Refresh indexes cleaned contexts into FAISS
    Given a vector store service with search enabled
    And FAISS interactions are recorded
    And plan 3 has contexts with stored content and blanks
    When I refresh the vector store for plan 3
    Then the refresh result should be 1 document
    And FAISS should be built with 1 cleaned document
    And the plan 3 cache should hold the FAISS instance

  Scenario: Refresh honors OpenAI provider configuration
    Given a vector store service with search enabled
    And a stub OpenAI embeddings backend is available
    And the embeddings provider is "openai" using model "text-embedding-3-large"
    And plan 4 has contexts with stored content
    And FAISS interactions are recorded
    When I refresh the vector store for plan 4
    Then the last OpenAI embeddings model should be "text-embedding-3-large"
    And the refresh result should be 2 documents

  Scenario: Unsupported embeddings provider raises a configuration error
    Given a vector store service with search enabled
    And the embeddings provider flag is "replit"
    And plan 6 has contexts with stored content
    When I attempt to refresh the vector store for plan 6
    Then a configuration error should mention unsupported embeddings provider

  Scenario: Cached FAISS search formats similarity hits
    Given a vector store service with search enabled
    And FAISS interactions are recorded
    And plan 5 cache contains similarity results
    When I search plan 5 with the query "Need summary" and limit 1
    Then the FAISS similarity search limit should be 1
    And the search results should include one formatted hit with path "doc.md" and score 0.25

  Scenario: Search loads persisted FAISS index when cache is empty
    Given a vector store service with search enabled
    And FAISS interactions are recorded
    And plan 8 already has persisted FAISS files
    When I search plan 8 with the query "Need summary"
    Then FAISS should be loaded for plan 8
    And the plan 8 cache should hold the FAISS instance

  Scenario: Search returns empty when loading fails and refresh is disabled
    Given a vector store service with search enabled
    And FAISS interactions are recorded
    And plan 9 already has persisted FAISS files
    And loading the plan 9 index will fail
    When I search plan 9 with the query "Need summary" and refresh disabled
    Then the search results should be empty

  Scenario: Search aborts when refresh indexes nothing
    Given a vector store service with search enabled
    And plan 12 has no context documents
    When I search plan 12 with the query "Need refresh"
    Then the search results should be empty

  Scenario: Search rebuilds the vector index when nothing is cached
    Given a vector store service with search enabled
    And FAISS interactions are recorded
    And future FAISS builds will return similarity hits
    And plan 13 has contexts with stored content
    When I search plan 13 with the query "Need refresh"
    Then FAISS should be built with 2 cleaned document
    And the plan 13 cache should hold the FAISS instance
    And the search results should include one formatted hit with path "doc.md" and score 0.25

  Scenario: Search trims blank queries
    Given a vector store service with search enabled
    When I search plan 10 with the query ""
    Then the search results should be empty

  Scenario: Invalidation without a plan identifier is a no-op
    Given a vector store service with search enabled
    And FAISS interactions are recorded
    And plan 11 cache contains similarity results
    When I invalidate the vector store without specifying a plan
    Then the plan 11 cache should still contain the cached store
