package dto

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

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

type GetEndpointRes struct {
	BasicRes
	Data *EndpointFormat `json:"data"`
}

type ListEndpointRes struct {
	BasicRes
	Data []EndpointSummary `json:"data"`
}

type CreateEndpointRes struct {
	BasicRes
	Endpoint *EndpointFormat `json:"endpoint"`
}

type DumpEndpointRes struct {
	BasicRes
	Endpoint *EndpointFormat `json:"endpoint"`
}

type UpdateEndpointRes struct {
	BasicRes
	Endpoint    *EndpointFormat `json:"endpoint"`
	FieldErrors []FieldError    `json:"field_errors,omitempty"`
}

type FieldError struct {
	Field string `json:"field"`
	Error string `json:"error"`
}

type EndpointFormat struct {
	ID          uint64                  `json:"id"`
	DataappId   uint64                  `json:"dataappp_id"`
	Name        string                  `json:"name"`
	Type        string                  `json:"type"`
	Description string                  `json:"description"`
	Endpoint    string                  `json:"endpoint"`
	Method      string                  `json:"method"`
	ClusterId   string                  `json:"cluster_id"`
	Database    string                  `json:"database"`
	SqlTemplate string                  `json:"sql_template"`
	Settings    entity.EndpointSettings `json:"settings"`
	Args        []*entity.EndpointArgs  `json:"args"`
	Tag         string                  `json:"tag"`
	Batch       bool                    `json:"batch"`
	CreatedBy   string                  `json:"created_by"`
	UpdatedBy   string                  `json:"updated_by"`
	CreatedAt   utils.JsonTime          `json:"created_at"`
	UpdatedAt   utils.JsonTime          `json:"updated_at"`
	ServiceUrl  string                  `json:"service_url"`
	HasModified bool                    `json:"has_modified"`
	Vid         uint64                  `json:"vid,string"`
	IsOnline    bool                    `json:"is_online"`
}

type EndpointSummary struct {
	ID          uint64 `json:"id"`
	DataappId   uint64 `json:"dataappp_id"`
	Name        string `json:"name"`
	Type        string `json:"type"`
	Method      string `json:"method"`
	Endpoint    string `json:"endpoint"`
	ClusterID   string `json:"cluster_id"`
	IsOnline    int    `json:"is_online"`
	HasModified bool   `json:"has_modified"`
	Vid         uint64 `json:"vid,string"`
}

type CreateAutoGenerateEndpointRes struct {
	BasicRes
	Data []*EndpointFormat `json:"data"`
}
