package config

import (
	"testing"
	"time"
)

func TestKnowledgeVectorSearchDefaults(t *testing.T) {
	t.Setenv("KNOWLEDGE_VECTOR_SEARCH", "")
	t.Setenv("KNOWLEDGE_VECTOR_INDEX_TIMEOUT", "")
	cfg, err := Load()
	if err != nil {
		t.Fatal(err)
	}
	if cfg.Knowledge.VectorSearch != "auto" {
		t.Fatalf("varsayılan auto olmalı: %q", cfg.Knowledge.VectorSearch)
	}
	if cfg.Knowledge.VectorIndexTimeout != 10*time.Minute {
		t.Fatalf("varsayılan 10 dk olmalı: %v", cfg.Knowledge.VectorIndexTimeout)
	}
}

func TestKnowledgeVectorSearchValues(t *testing.T) {
	for _, v := range []string{"auto", "on", "off", "ON", " Off "} {
		t.Setenv("KNOWLEDGE_VECTOR_SEARCH", v)
		if _, err := Load(); err != nil {
			t.Errorf("%q geçerli olmalı: %v", v, err)
		}
	}
}

func TestKnowledgeVectorSearchRejectsInvalid(t *testing.T) {
	t.Setenv("KNOWLEDGE_VECTOR_SEARCH", "belki")
	if _, err := Load(); err == nil {
		t.Fatal("geçersiz değer reddedilmeli (sessizce yutulmamalı)")
	}
}

func TestKnowledgeVectorSearchEmptyLiteralIsAuto(t *testing.T) {
	// Elle kurulan Config değişmezleri (testler) boş değerle de doğrulanabilmeli.
	if err := (Config{
		Mongo:  Mongo{URI: "mongodb://x", Database: "d"},
		Ollama: Ollama{BaseURL: "http://localhost:11434"},
		Chat:   Chat{MaxHistoryMessages: 1, DefaultContextTokens: 512},
		WS:     WS{PingInterval: time.Second, PongWait: 2 * time.Second, OutboundBuffer: 1},
	}).Validate(); err != nil {
		t.Fatalf("boş değer auto sayılmalı: %v", err)
	}
}
