package main

import (
	"context"

	"fiko-ai/internal/agent"
	"fiko-ai/internal/persona"
)

// personaSourceFor, persona servisini ajanın PersonaSource arayüzüne uyarlar.
//
// Neden uyarlama? persona paketi ajanı BİLMEMELİ (bağımlılık yönü tersine
// dönerdi). Bu köprü olmadan persona, ajan tarafından içe aktarılamazdı —
// ws.notifyBridgeFor ile aynı desen.
type personaSource struct{ svc *persona.Service }

// ActiveProfiles, ajanın istediği arayüzü doldurur (hata DÖNMEZ: persona
// hatalarını yutmak ajanın sorumluluğunda değil, burada yutulur ve loglanır).
func (p personaSource) ActiveProfiles(ctx context.Context, userID string) []agent.Persona {
	list := p.svc.Active(ctx, userID)
	if len(list) == 0 {
		return nil
	}
	out := make([]agent.Persona, 0, len(list))
	for _, x := range list {
		out = append(out, agent.Persona{
			Name:         x.Name,
			Role:         x.Role,
			Instructions: x.Instructions,
			Notes:        x.Notes,
		})
	}
	return out
}

// personaSourceFor, servisi arayüze çeviren kısa yol.
func personaSourceFor(svc *persona.Service) agent.PersonaSource { return personaSource{svc: svc} }

// personaRepoName, açılış loguna depo türünü yazar (Mongo mu bellek mi).
func personaRepoName(r persona.Repository) string {
	switch r.(type) {
	case *persona.MemoryRepository:
		return "bellek içi (kalıcı değil)"
	default:
		return "mongo (kalıcı)"
	}
}
