package automation

import (
	"encoding/json"
	"net/http"
	"testing"

	"github.com/stretchr/testify/require"
	"github.com/tidbcloud/AgentTeam/internal/agsbridge"
	"github.com/tidbcloud/AgentTeam/internal/service/automation/runtime"
)

func TestAGSHTTPAutomationRepoStatusWriterCreatesCommitStatus(t *testing.T) {
	var gotPath string
	var gotAuth string
	var gotPayload map[string]string
	var gotSiteAdmin bool
	writer := AGSHTTPAutomationRepoStatusWriter{
		AuthHeader:          "X-MeshX-Auth",
		AuthorizationHeader: "Bearer meshx-internal",
		Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
			gotPath = r.URL.Path
			gotAuth = r.Header.Get("X-MeshX-Auth")
			gotSiteAdmin = agsbridge.SiteAdminFromContext(r.Context())
			require.NoError(t, json.NewDecoder(r.Body).Decode(&gotPayload))
			w.WriteHeader(http.StatusCreated)
		}),
	}

	err := writer.CreateCommitStatus(t.Context(), runtime.AutomationCommitStatusRequest{
		RepositoryOwner: "pingcap",
		RepositoryName:  "agentteam",
		CommitSHA:       "3333333333333333333333333333333333333333",
		State:           "success",
		Context:         "meshx/automation/.agentteam/build.yml",
		Description:     "Automation Build succeeded",
		TargetURL:       "https://meshx.example.test/automations/runs/wfr_1",
	})

	require.NoError(t, err)
	require.Equal(t, "/api/v3/repos/pingcap/agentteam/statuses/3333333333333333333333333333333333333333", gotPath)
	require.Equal(t, "Bearer meshx-internal", gotAuth)
	require.True(t, gotSiteAdmin)
	require.Equal(t, map[string]string{
		"state":       "success",
		"context":     "meshx/automation/.agentteam/build.yml",
		"description": "Automation Build succeeded",
		"target_url":  "https://meshx.example.test/automations/runs/wfr_1",
	}, gotPayload)
}
