package e2e

import (
	"testing"

	"github.com/capcom6/go-helpers/anys"
)

func TestPriorityPost(t *testing.T) {
	cases := []struct {
		name               string
		priority           *int
		expectedStatusCode int
	}{
		{
			name:               "min priority",
			priority:           anys.AsPointer(-128),
			expectedStatusCode: 202,
		},
		{
			name:               "max priority",
			priority:           anys.AsPointer(127),
			expectedStatusCode: 202,
		},
		{
			name:               "invalid priority",
			priority:           anys.AsPointer(128),
			expectedStatusCode: 400,
		},
		{
			name:               "invalid priority",
			priority:           anys.AsPointer(-129),
			expectedStatusCode: 400,
		},
		{
			name:               "default priority",
			priority:           nil,
			expectedStatusCode: 202,
		},
	}

	req := map[string]any{
		"message": "test",
		"phoneNumbers": []string{
			"+79999999999",
		},
	}

	credentials := mobileDeviceRegister(t, publicMobileClient)
	client := publicUserClient.Clone().SetBasicAuth(credentials.Login, credentials.Password)

	for _, c := range cases {
		t.Run(c.name, func(t *testing.T) {
			if c.priority != nil {
				req["priority"] = *c.priority
			} else {
				delete(req, "priority")
			}
			res, err := client.R().
				SetHeader("Content-Type", "application/json").
				SetBody(req).
				Post("messages")
			if err != nil {
				t.Fatal(err)
			}

			if res.StatusCode() != c.expectedStatusCode {
				t.Fatal(res.StatusCode(), res.String())
			}
		})
	}
}
