package user

import (
	"context"
	"encoding/json"
	"net/http"
)

// GetAuditRequest struct for getting user's audits.
type GetAuditRequest struct {
	// Find by api call.
	// Required: false
	Call string `url:"call,omitempty" json:"call,omitempty"`

	// Find all audits after point in time (unixtime)
	// Required: false
	TimestampAt uint64 `url:"timestampAt,omitempty" json:"timestampAt,omitempty"`

	// Find all audits before point in time (unixtime)
	// Required: false
	TimestampTo uint64 `url:"timestampTo,omitempty" json:"timestampTo,omitempty"`

	// find by HTTP max status code
	// Required: false
	MaxStatusCode uint64 `url:"maxStatusCode,omitempty" json:"maxStatusCode,omitempty"`

	// find by HTTP min status code
	// Required: false
	MinStatusCode uint64 `url:"minStatusCode,omitempty" json:"minStatusCode,omitempty"`

	// Sort by one of supported fields, format +|-(field)
	// Required: false
	SortBy string `url:"sortBy,omitempty" json:"sortBy,omitempty" validate:"omitempty,sortBy"`

	// Page number.
	// Required: false
	Page uint64 `url:"page,omitempty" json:"page,omitempty"`

	// Page size, maximum - 100.
	// Required: false
	Size uint64 `url:"size,omitempty" json:"size,omitempty"`
}

// GetAudit gets user's audits.
func (u User) GetAudit(ctx context.Context, req GetAuditRequest) (ListAudits, error) {
	url := "/cloudapi/user/getAudit"

	res, err := u.client.DecortApiCall(ctx, http.MethodPost, url, req)
	if err != nil {
		return ListAudits{}, err
	}

	list := ListAudits{}

	err = json.Unmarshal(res, &list)
	if err != nil {
		return ListAudits{}, err
	}

	return list, nil
}
