package webhook_test

import (
	"os"
	"path/filepath"
	"testing"

	"bit.admedia.com/scm/ad/adpilot-indexing-repo-sync.com/internal/webhook"
)

func loadFixture(t *testing.T, name string) []byte {
	t.Helper()
	path := filepath.Join("testdata", name)
	data, err := os.ReadFile(path)
	if err != nil {
		t.Fatalf("read fixture %s: %v", name, err)
	}
	return data
}

func TestParseRefsChangedMaster(t *testing.T) {
	parsed, err := webhook.ParseRefsChanged(loadFixture(t, "refs_changed_master.json"), "repo:refs_changed")
	if err != nil {
		t.Fatalf("ParseRefsChanged: %v", err)
	}
	if parsed.RepoID != "ad/adpilot-indexing-repo-sync.com" {
		t.Fatalf("repoID: got %q", parsed.RepoID)
	}
	if len(parsed.Master) != 1 {
		t.Fatalf("master changes: got %d", len(parsed.Master))
	}
}

func TestParseRefsChangedFeatureBranch(t *testing.T) {
	parsed, err := webhook.ParseRefsChanged(loadFixture(t, "refs_changed_feature_branch.json"), "repo:refs_changed")
	if err != nil {
		t.Fatalf("ParseRefsChanged: %v", err)
	}
	if len(parsed.Master) != 0 {
		t.Fatalf("expected no master changes")
	}
}

func TestParseRefsChangedInvalidJSON(t *testing.T) {
	_, err := webhook.ParseRefsChanged([]byte("{"), "repo:refs_changed")
	if err == nil {
		t.Fatal("expected parse error")
	}
}

func TestParseRefsChangedUnsupportedEvent(t *testing.T) {
	body := []byte(`{"eventKey":"repo:modified","repository":{"slug":"x","project":{"key":"ad"}}}`)
	_, err := webhook.ParseRefsChanged(body, "repo:modified")
	if err == nil {
		t.Fatal("expected unsupported event error")
	}
}
