package client

import (
	"fmt"
	"git.sxidc.com/go-tools/api_binding/http_binding/response"
	"git.sxidc.com/service-supports/ds-sdk/client/request"
	"net/url"
)

const (
	createNamespaceUrl = "/ds/api/v1/namespace/create"
	deleteNamespaceUrl = "/ds/api/v1/namespace/delete"
	getNamespacesUrl   = "/ds/api/v1/namespace/query"
)

func (c *Client) CreateNamespace(token string, baseUrl string, name string) error {
	fullUrl, err := url.JoinPath(baseUrl, createNamespaceUrl)
	if err != nil {
		return err
	}

	resp := new(response.MsgResponse)

	err = c.post(token, fullUrl, &request.CreateNamespaceRequest{
		Name: name,
	}, resp)
	if err != nil {
		return err
	}

	if !resp.Success {
		return fmt.Errorf(resp.Msg)
	}

	return nil
}

func (c *Client) DeleteNamespace(token string, baseUrl string, name string) error {
	fullUrl, err := url.JoinPath(baseUrl, deleteNamespaceUrl)
	if err != nil {
		return err
	}

	resp := new(response.MsgResponse)

	err = c.post(token, fullUrl, &request.DeleteNamespaceRequest{
		Name: name,
	}, resp)
	if err != nil {
		return err
	}

	if !resp.Success {
		return fmt.Errorf(resp.Msg)
	}

	return nil
}

func (c *Client) GetNamespaces(token string, baseUrl string, name string) ([]NamespaceInfo, error) {
	fullUrl, err := url.JoinPath(baseUrl, getNamespacesUrl)
	if err != nil {
		return nil, err
	}

	resp := new(response.InfosResponse[NamespaceInfo])

	err = c.get(token, fullUrl, map[string]string{
		"name": name,
	}, resp)
	if err != nil {
		return nil, err
	}

	if !resp.Success {
		return nil, fmt.Errorf(resp.Msg)
	}

	return resp.Infos, nil
}