package main

import (
	"context"
	"log/slog"

	"fiko-ai/internal/pdks"
	"fiko-ai/internal/tool"
)

// pdks.go: PDKS paketini tool kayit sistemine baglar.
//
// Neden ayri dosya? main.go zaten cok bagimlilik kuruyor; burada yalnizca
// "servisi modele ac" adimi vardir (memory.go / notify.go deseninin aynisi).
//
// KOSUL: servis ve depo bagli olmalidir; degilse tool'lar KAYDEDILMEZ (modele
// "kullanilamiyor" gorunen ama calismayan arac vermekten iyidir).
//
// ONAY: bu tool'lar risk seviyesi tasir (bkz. pdks/tools.go basligi) ve kayit
// sirasinda AYNI onay altyapisina baglanir. Silmeler RiskHigh -> kullanici
// Ayarlar'daki "Yazma / silme onayi" kuralina gore dialoga duser.
func registerPdksTools(ctx context.Context, svc *pdks.Service, reg *tool.Registry, log *slog.Logger) {
	if svc == nil || reg == nil {
		return
	}
	set := pdks.NewToolSet(svc)
	defs := set.Definitions()
	if len(defs) == 0 {
		return
	}
	for _, d := range defs {
		if _, _, err := reg.EnsureBuiltin(ctx, d.Tool, d.Handler, true); err != nil {
			log.Warn("PDKS tool kaydi basarisiz", "tool", d.Tool.Name, "err", err)
			continue
		}
		// Kod alanlari degismisse kayitlari tazele (bellek tool'larindaki ders):
		// veritabanindaki eski izin modele sunulmayi engelleyebilir.
		if err := reg.SyncBuiltinFields(ctx, d.Tool); err != nil {
			log.Warn("PDKS tool alanlari tazelenemedi", "tool", d.Tool.Name, "err", err)
		}
	}
	log.Info("PDKS tool'lari ETKIN: pdks.dept.list / pdks.employee.list / " +
		"pdks.employee.create / pdks.employee.delete / pdks.attendance.create / " +
		"pdks.report.daily / pdks.report.range")
}
