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 (
	createDataContainerUrl = "/ds/api/v1/dataContainer/create"
	deleteDataContainerUrl = "/ds/api/v1/dataContainer/delete"
	getDataContainersUrl   = "/ds/api/v1/dataContainer/query"
)

func (c *Client) CreateDataContainer(token string, baseUrl string, namespace string, dataSource string, name string, spec string) error {
	fullUrl, err := url.JoinPath(baseUrl, createDataContainerUrl)
	if err != nil {
		return err
	}

	resp := new(response.MsgResponse)

	err = c.post(token, fullUrl, &request.CreateDataContainerRequest{
		Namespace:  namespace,
		DataSource: dataSource,
		Name:       name,
		Spec:       spec,
	}, resp)
	if err != nil {
		return err
	}

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

	return nil
}

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

	resp := new(response.MsgResponse)

	err = c.post(token, fullUrl, &request.DeleteDataContainerRequest{
		Namespace:  namespace,
		DataSource: dataSource,
		Name:       name,
	}, resp)
	if err != nil {
		return err
	}

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

	return nil
}

func (c *Client) GetDataContainers(token string, baseUrl string, namespace string, dataSource string, name string) ([]DataContainerInfo, error) {
	fullUrl, err := url.JoinPath(baseUrl, getDataContainersUrl)
	if err != nil {
		return nil, err
	}

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

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

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

	return resp.Infos, nil
}