package e2e

import (
	"encoding/json"
	"fmt"
)

func ExecOpenApiProjectCase() {
	OpenApi_CreateAndListProject()

}

func OpenApi_CreateAndListProject() {
	url := DevIamOpenApiHost + "/v1beta1/projects"

	var header = map[string]string{}
	header["Content-type"] = "application/json"
	header[DigestAuthUserHeader] = orgOwnerKey

	name := fmt.Sprintf("e2e-p-%s", CurTimeStr())
	body := fmt.Sprintf(`{
			"name": "%s",
			"aws_cmek_enabled": true
		}`, name)
	code, data, err := RestyExec("POST", url, header, body)
	if err != nil {
		code = 0
		data = err.Error()
	}
	var pid string
	if code == 200 {
		var pidI = &OpenApiProjectId{}
		err := json.Unmarshal([]byte(data), pidI)
		if err == nil {
			pid = fmt.Sprintf("%d", pidI.Id)
		}
	}

	pass := false
	listUrl := DevIamOpenApiHost + "/v1beta1/projects"
	listCode, listData, listErr := RestyExec("GET", listUrl, header, "")
	if listErr != nil {
		listCode = 0
		listData = listErr.Error()
	}
	if listCode == 200 {
		ps := &OpenApiProjects{}
		err := json.Unmarshal([]byte(listData), ps)
		if err == nil {
			for _, p := range ps.Items {
				if p.Id == pid && p.Name == name {
					pass = true
					break
				}
			}
		}
	}

	SaveCase("OpenApi_Project", "CreateProject", CaseDetail{
		Url:       url,
		Method:    "POST",
		ReqHeader: header,
		ReqBody:   body,
		Pass:      pass,
		RspCode:   code,
		RspData:   data,
		Extra: map[string]interface{}{
			"list_url":  listUrl,
			"list_code": listCode,
			"list_data": listData,
		},
	})
}

type OpenApiProjectId struct {
	Id uint64 `json:"id,omitempty"`
}

type OpenApiProjects struct {
	NextPageToken string     `json:"nextPageToken,omitempty"`
	Items         []*Project `json:"projects,omitempty"`
}
