package serverDomain

import (
	"github.com/deeptest-com/deeptest/internal/pkg/consts"
	"github.com/deeptest-com/deeptest/internal/pkg/domain"
	"github.com/deeptest-com/deeptest/internal/pkg/helper/openapi/convert"
	_domain "github.com/deeptest-com/deeptest/pkg/domain"
	"github.com/lib/pq"
)

type EndpointReqPaginate struct {
	_domain.PaginateReq
	ProjectId    int64    `json:"projectId"`
	CategoryId   int64    `json:"categoryId"`
	Status       []int64  `json:"status"`
	CreateUser   []string `json:"createUser"`
	Title        string   `json:"title"`
	ServeId      uint     `json:"serveId"`
	ServeVersion string   `json:"serveVersion"`
	TagNames     []string `json:"tagNames"`
	ServeIds     []uint   `json:"serveIds"`
	IsFavorite   bool     `json:"isFavorite"`
	UserId       uint     `json:"UserId"`
}

type EndpointInterfaceReqPaginate struct {
	_domain.PaginateReq

	ServeIds   consts.Integers `json:"serveIds"`
	Keywords   string          `json:"Keywords"`
	CategoryId int64           `json:"categoryId"`
	ProjectId  uint            `json:"projectId"`
}

type OpenApiParam struct {
	domain.Param
	Format      string         `json:"format"`
	Example     string         `json:"example"`
	Pattern     string         `json:"pattern"`
	MinLength   int64          `json:"minLength"`
	MaxLength   int64          `json:"maxLength"`
	Default     string         `json:"default"`
	MultipleOf  int64          `json:"multipleOf"`
	MinItems    int64          `json:"minItems"`
	MaxItems    int64          `json:"maxItems"`
	UniqueItems bool           `json:"uniqueItems"`
	Ref         string         `json:"ref"`
	Required    bool           `json:"required"`
	Type        string         `json:"type"`
	Description string         `json:"description"`
	Minimum     float64        `json:"minimum"`
	Maximum     float64        `json:"maximum"`
	Enum        pq.StringArray `json:"enum"`
}

type EndpointReq struct {
	ID           int64                `json:"id"`
	ProjectId    uint                 `json:"projectId" validate:"required"`
	ServeId      uint                 `json:"serveId" validate:"required"`
	ServerId     uint                 `json:"serverId"`
	Status       int64                `json:"status"`
	Title        string               `json:"title" validate:"required"`
	Path         string               `json:"path"`
	Version      string               `json:"version"`
	CreateUser   string               `json:"CreateUser"`
	UpdateUser   string               `json:"updateUser"`
	CategoryId   int64                `json:"categoryId"`
	PathParams   []OpenApiParam       `gorm:"-" json:"pathParams"`
	Interfaces   []InterfaceResp      `gorm:"-" json:"interfaces"`
	GlobalParams []domain.GlobalParam `gorm:"-" json:"globalParams"`
	Description  string               `json:"description"`
	Curl         string               `json:"curl"`
}

type EndpointRes struct {
	ProjectId  int64           `json:"project_id"`
	Status     int64           `json:"status"`
	Title      string          `json:"title"`
	Version    string          `json:"version"`
	PathParams []OpenApiParam  `json:"pathParams"`
	Interfaces []InterfaceResp `json:"interfaces"`
}

type EndpointVersionReq struct {
	EndpointId int64  `json:"endpointId"`
	Version    string `json:"version"`
}

type ImportEndpointDataReq struct {
	ServeId          uint                `json:"serveId" validate:"required"`    //服务ID
	DriverType       convert.DriverType  `json:"driverType" validate:"required"` //接口数据来源
	CategoryId       int64               `json:"categoryId"`                     //所属分类
	DataSyncType     consts.DataSyncType `json:"dataSyncType"`                   //数据同步方式
	OpenUrlImport    bool                `json:"openUrlImport"`                  //开启url导入
	FilePath         string              `json:"filePath" validate:"required"`
	ProjectId        uint                `json:"projectId"`
	UserId           uint                `json:"userId"`
	SourceType       consts.SourceType   `json:"sourceType"`
	ClassCode        string              `json:"classCode"`     //模型类名
	FunctionCodes    []string            `json:"functionCodes"` //要导入的方法
	AddServicePrefix bool                `json:"addServicePrefix"`
}

type BatchUpdateReq struct {
	FieldName   string      `json:"fieldName"`
	Value       interface{} `json:"value"`
	EndpointIds []uint      `json:"endpointIds"`
}

type EndpointTagReq struct {
	Id       uint     `json:"id"`
	TagNames []string `json:"tagNames"`
}

type GenerateFromResponseReq struct {
	Code        string `json:"code"`
	ContentType string `json:"contentType"`
	Description string `json:"description"`
	InterfaceId uint   `json:"interfaceId"`
	Data        string `json:"data"`
}

type GenerateFromRequestReq struct {
	ContentType string `json:"contentType"`
	Description string `json:"description"`
	InterfaceId uint   `json:"interfaceId"`
	Data        string `json:"data"`
}

type ImportThirdPartyEndpointReq struct {
	CategoryId    int64               `json:"categoryId"`                   //所属分类
	DataSyncType  consts.DataSyncType `json:"dataSyncType"`                 //数据合并策略
	FilePath      string              `json:"filePath" validate:"required"` //数据源的环境url
	ClassCode     string              `json:"classCode"`                    //模型类名
	FunctionCodes []string            `json:"functionCodes"`                //要导入的方法
	ProjectId     uint                `json:"projectId"`
	ServeId       uint                `json:"serveId"`
	UserId        uint                `json:"userId"`
}

type UpdateNameReq struct {
	Id   uint   `json:"id"`
	Name string `json:"name"`
}

type FavoriteReq struct {
	Id        uint `json:"id"`
	ProjectId uint
}
