import { getLLMModelIssue, isLLMModelProviderInstalled, LLMModelIssueCode } from '../utils'

describe('llm utils', () => {
  describe('getLLMModelIssue', () => {
    it('returns provider-required when the model provider is missing', () => {
      expect(getLLMModelIssue({ modelProvider: undefined })).toBe(
        LLMModelIssueCode.providerRequired,
      )
    })

    it('returns provider-plugin-unavailable when the provider plugin is not installed', () => {
      expect(
        getLLMModelIssue({
          modelProvider: 'langgenius/openai/gpt-4.1',
          isModelProviderInstalled: false,
        }),
      ).toBe(LLMModelIssueCode.providerPluginUnavailable)
    })

    it('returns null when the provider is present and installed', () => {
      expect(
        getLLMModelIssue({
          modelProvider: 'langgenius/openai/gpt-4.1',
          isModelProviderInstalled: true,
        }),
      ).toBeNull()
    })
  })

  describe('isLLMModelProviderInstalled', () => {
    it('returns true when the model provider is missing', () => {
      expect(isLLMModelProviderInstalled(undefined, new Set())).toBe(true)
    })

    it('matches installed plugin ids using the provider plugin prefix', () => {
      expect(
        isLLMModelProviderInstalled('langgenius/openai/gpt-4.1', new Set(['langgenius/openai'])),
      ).toBe(true)
    })

    it('returns false when the provider plugin id is not installed', () => {
      expect(
        isLLMModelProviderInstalled('langgenius/openai/gpt-4.1', new Set(['langgenius/anthropic'])),
      ).toBe(false)
    })
  })
})
