package fake

import (
	"github.com/iomodo/staff/llm"
)

// FakeFactory creates fake LLM providers for testing
type FakeFactory struct{}

// NewFakeFactory creates a new fake factory
func NewFakeFactory() *FakeFactory {
	return &FakeFactory{}
}

// CreateProvider creates a new fake provider
func (f *FakeFactory) CreateProvider(config llm.Config) (llm.LLMProvider, error) {
	return NewFakeProvider(), nil
}

// SupportsProvider returns true if this factory supports the given provider type
func (f *FakeFactory) SupportsProvider(provider llm.Provider) bool {
	return provider == llm.ProviderFake
}

// init registers the fake factory when the package is imported
func init() {
	llm.RegisterProvider(llm.ProviderFake, NewFakeFactory())
}