package integration

import (
	"fmt"
	"log"
	"net/http"
	"testing"
	"time"

	"github.com/stretchr/testify/assert"
)

func Inspect(volume string, file string, enc bool) (*http.Response, error) {
	requestURL := fmt.Sprintf("http://localhost:9090/api/v1/admin/inspect?volume=%s&file=%s&encrypt=%t", volume, file, enc)
	request, err := http.NewRequest(
		"GET", requestURL, nil)
	if err != nil {
		log.Println(err)
	}
	request.Header.Add("Cookie", fmt.Sprintf("token=%s", token))
	request.Header.Add("Content-Type", "application/json")
	client := &http.Client{
		Timeout: 2 * time.Second,
	}
	response, err := client.Do(request)
	return response, err
}

func TestInspect(t *testing.T) {
	assert := assert.New(t)

	type args struct {
		volume  string
		file    string
		encrypt bool
	}

	// Inspect returns successful response always
	tests := []struct {
		name          string
		args          args
		expStatusCode int
		expectedError bool
	}{
		{
			name: "Test Invalid Path",
			args: args{
				volume:  "/test-with-slash",
				file:    "/test-with-slash",
				encrypt: false,
			},
			expStatusCode: 200,
			expectedError: false,
		},

		{
			name: "Test Invalid characters in Path",
			args: args{
				volume:  "//test",
				file:    "//bucket",
				encrypt: false,
			},
			expStatusCode: 200,
			expectedError: true,
		},
		{
			name: "Test valid bucket",
			args: args{
				volume:  "test-bucket",
				file:    "test.txt",
				encrypt: true,
			},
			expStatusCode: 200,
			expectedError: false,
		},
		{
			name: "Test Empty Path", // Un processable entity error
			args: args{
				volume:  "",
				file:    "",
				encrypt: false,
			},
			expStatusCode: 422,
			expectedError: false,
		},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(_ *testing.T) {
			resp, err := Inspect(tt.args.volume, tt.args.file, tt.args.encrypt)
			if tt.expectedError {
				assert.Nil(err)
				if err != nil {
					log.Println(err)
					return
				}
			}
			if resp != nil {
				assert.Equal(
					tt.expStatusCode,
					resp.StatusCode,
				)
			}
		})
	}
}
