package agent

import "context"

// PersonaSource, kullanıcıya atanmış davranış profillerini okur.
//
// Neden arayüz? Ajan `persona` paketini BİLMEMELİ (bağımlılık yönü). persona
// yönü ajanı bilmez; main.go bu arayüzü doldurur (ws.SetNotify benzeri desen).
// Testte tek bir sahte uygulanır.
type PersonaSource interface {
	// ActiveProfiles, kullanıcıya atanmış profilleri döner.
	//
	// HATA DÖNMEMELİ: ajan hata gelirse profili yok sayıp sohbeti sürdürür.
	// Profil bir zenginliktir; sohbeti çökertmemelidir.
	ActiveProfiles(ctx context.Context, userID string) []Persona
}

// Persona, ajanın gördüğü profil hali (persona.Profile'ten bağımsız kopyadır).
type Persona struct {
	Name         string
	Role         string
	Instructions string
	Notes        string
}

// SetPersonas, kullanıcı davranış profili kaynağını bağlar.
//
// main.go'dan sonradan bağlanır (SetMemory deseni): bu olmadan da ajan çalışır,
// yalnızca profil kuralları isteme girmez (geriye uyumlu davranış).
func (a *Agent) SetPersonas(p PersonaSource) { a.personas = p }

// PreviewSystemPromptFor, sistem istemini DIŞARIDAN üretir (yalnız tanı ve
// teşhis için; sohbet yolu bunu KULLANMAZ).
//
// Neden dışa açık? "Profil gerçekten isteme giriyor mu?" sorusu canlı veriyle
// yanıtlanabilmelidir (tools/ altındaki teşhis aracı). Üretimde yalnız içe
// dönük çağrılır; yeni bir yol açmaz.
func (a *Agent) PreviewSystemPromptFor(ctx context.Context, userID string, toolsEnabled bool) string {
	return a.systemPromptFor(ctx, userID, toolsEnabled, turnPlan{userID: userID})
}
