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 (
	createDataSourceUrl = "/ds/api/v1/dataSource/create"
	deleteDataSourceUrl = "/ds/api/v1/dataSource/delete"
	getDataSourcesUrl   = "/ds/api/v1/dataSource/query"
)

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

	resp := new(response.MsgResponse)

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

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

	return nil
}

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

	resp := new(response.MsgResponse)

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

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

	return nil
}

func (c *Client) GetDataSources(token string, baseUrl string, namespace string, name string, typeStr string) ([]DataSourceInfo, error) {
	fullUrl, err := url.JoinPath(baseUrl, getDataSourcesUrl)
	if err != nil {
		return nil, err
	}

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

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

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

	return resp.Infos, nil
}