package llm

import (
	"strings"
	"testing"

	"github.com/nexuscrm/sentry/internal/types"
)

func TestFormatTemplate_RowSpikeWARN(t *testing.T) {
	r := types.RuleResult{
		RuleID: "data.row_spike_warn",
		Entity: "Contact",
		Level:  "WARN",
		Context: map[string]any{
			"current":     int64(523411),
			"baseline_1h": int64(300000),
			"delta_pct":   0.745, // fraction from pctDelta(), displayed as 74.5%
		},
	}
	msg := FormatTemplate(r)
	if !strings.Contains(msg, "Contact") {
		t.Errorf("missing entity: %s", msg)
	}
	if !strings.Contains(msg, "74.5") {
		t.Errorf("missing delta pct: %s", msg)
	}
	if !strings.Contains(msg, "WARN") {
		t.Errorf("missing level: %s", msg)
	}
	if !strings.Contains(msg, "🟡") {
		t.Errorf("missing WARN icon: %s", msg)
	}
}

func TestFormatTemplate_CritIcon(t *testing.T) {
	r := types.RuleResult{
		RuleID:  "data.row_spike_crit",
		Entity:  "Opportunity",
		Level:   "CRIT",
		Context: map[string]any{"current": int64(1_000_000), "baseline_1h": int64(400_000), "delta_pct": 1.5},
	}
	msg := FormatTemplate(r)
	if !strings.Contains(msg, "🔴") {
		t.Errorf("missing CRIT icon: %s", msg)
	}
}

func TestFormatTemplate_UnknownRule(t *testing.T) {
	r := types.RuleResult{RuleID: "data.future_rule", Entity: "X", Level: "WARN"}
	msg := FormatTemplate(r)
	if msg == "" {
		t.Error("must never return empty string")
	}
	if !strings.Contains(msg, "data.future_rule") {
		t.Errorf("should include rule id in fallback: %s", msg)
	}
}

func TestFormatTemplate_MissingContextKeys(t *testing.T) {
	r := types.RuleResult{RuleID: "app.panic_surge", Entity: "", Level: "CRIT", Context: nil}
	msg := FormatTemplate(r)
	if msg == "" {
		t.Error("nil Context must not cause empty output")
	}
}
