package telemetry

import (
	"bytes"
	"encoding/json"
	"errors"
	"log/slog"
	"strings"
	"testing"
)

func TestRecordErrorIncludesErrorFields(t *testing.T) {
	var buf bytes.Buffer
	logger := slog.New(slog.NewJSONHandler(&buf, nil))

	RecordError(logger, errors.New("boom"), "operation failed", "repo_id", "ad/demo")

	var entry map[string]any
	if err := json.Unmarshal(buf.Bytes(), &entry); err != nil {
		t.Fatalf("unmarshal log: %v", err)
	}
	if entry["msg"] != "operation failed" {
		t.Fatalf("msg = %v", entry["msg"])
	}
	if entry["error"] != "boom" {
		t.Fatalf("error = %v", entry["error"])
	}
	if !strings.Contains(entry["error_kind"].(string), "errorString") {
		t.Fatalf("error_kind = %v", entry["error_kind"])
	}
	if entry["repo_id"] != "ad/demo" {
		t.Fatalf("repo_id = %v", entry["repo_id"])
	}
}

func TestRecordErrorNilSafe(t *testing.T) {
	RecordError(nil, errors.New("boom"), "ignored")
	RecordError(slog.Default(), nil, "ignored")
}
