package dto

import (
	"dataservices/commons/utils"
	"dataservices/internal/entity"
)

// @Time    : 2022/12/12 4:03 PM
// @Author  : lvhongmeng

type EndpointPublishRes struct {
	BasicRes
	Data struct {
		Version string `json:"version"`
	} `json:"data"`
}

type EndpointDeployRes struct {
	BaseResp BaseResp `json:"base_resp"`
	Data     struct {
		Version   string `json:"version"`
		Completed bool   `json:"completed"`
	} `json:"data"`
}

type ListEndpointPublishLogRes struct {
	BasicRes
	Data []EndpointPublishHistory `json:"data"`
}

type EndpointPublishHistory struct {
	DataappId  uint64         `json:"dataappp_id"`
	EndpointId uint64         `json:"endpoint_id"`
	Version    string         `json:"version"`
	IsOnline   int8           `json:"is_online"`
	UpdatedAt  utils.JsonTime `json:"updated_at"`
}

type ListEndpointPublishRes struct {
	BasicRes
	Data []*entity.EndpointPublish `json:"data"`
}

type EndpointBaseUrlRes struct {
	BasicRes
	Data string `json:"data"`
}

type CodeExampleRes struct {
	BasicRes
	Data *CodeExampleOut `json:"data"`
}

type TestEndpointRes struct {
	Data *EndpointResult `json:"data"`
}

type EndpointParamsRes struct {
	BasicRes
	Data []string `json:"data"`
}

type DBRow map[string]string

type DBColumn struct {
	Col      string `json:"col"`
	DataType string `json:"data_type"`
	Nullable bool   `json:"nullable"`
}

type EndpointDataRes struct {
	ErrCode      int64      `json:"err_code"`
	ErrMessage   string     `json:"err_message"`
	Columns      []DBColumn `json:"columns"`
	Rows         [][]string `json:"rows"`
	StartMs      int64      `json:"start_ms"`
	EndMs        int64      `json:"end_ms"`
	Latency      string     `json:"latency"`
	RowCount     int64      `json:"row_count"`
	RowAffect    int64      `json:"row_affect"`
	Limit        uint64     `json:"limit"`
	Query        string     `json:"query"`
	WarnCount    int        `json:"warn_count"`
	WarnMessages []string   `json:"warn_messages"`
}

func NewEndpointResult() EndpointResult {
	var res EndpointResult
	res.Data.Columns = make([]DBColumn, 0)
	res.Data.Rows = make([]DBRow, 0)
	return res
}

type EndpointResult struct {
	Type string `json:"type"`
	Data struct {
		Columns []DBColumn `json:"columns"`
		Rows    []DBRow    `json:"rows"`
		Result  struct {
			Code      int    `json:"code"`
			Message   string `json:"message"`
			StartMs   int64  `json:"start_ms"`
			EndMs     int64  `json:"end_ms"`
			Latency   string `json:"latency"`
			RowCount  int64  `json:"row_count"`
			RowAffect int64  `json:"row_affect"`
			Limit     uint64 `json:"limit"`
		} `json:"result"`
	} `json:"data"`
}

type StatementsRes struct {
	BasicRes
	Data []EndpointDataRes `json:"data"`
}

type CodeExampleOut struct {
	Test []CodeExample `json:"test"`
	Prod []CodeExample `json:"prod"`
}

type CodeExample struct {
	Type string `json:"type"`
	Code string `json:"code,omitempty"`
}

type ShowDBsRes struct {
	BasicRes
	Data []string `json:"data"`
}

type ShowTablesRes struct {
	BasicRes
	Data []string `json:"data"`
}

type ShowVectorFieldsRes struct {
	BasicRes
	Data []string `json:"data"`
}
