package services

import "k8s.io/api/core/v1"

type GetServicesListRequestDto struct {
	NameSpace string `json:"nameSpace"` // 命名空间
	PageIndex int    `json:"pageIndex"`
	PageSize  int    `json:"pageSize"`
}

type GetServicesListResultDataResponseDto struct {
	ServiceName string   `json:"serviceName"` // 服务名称
	Type        string   `json:"type"`        // 服务类型
	ClusterIP   string   `json:"clusterIP"`   // 集群ip
	ExternalIPs []string `json:"externalIPs"` // 外部ip
	ServicePort []string `json:"servicePort"` // 服务端口
	TargetPort  []string `json:"targetPort"`  // 目标端口
	CreateTime  string   `json:"createTime"`  // 创建时间
}

type DeleteServiceRequestDto struct {
	NameSpace   string `json:"nameSpace"`   // 命名空间
	ServiceName string `json:"serviceName"` // 服务名称
}

type GetServiceInfoRequestDto struct {
	NameSpace   string `json:"nameSpace"`   // 命名空间
	ServiceName string `json:"serviceName"` // 服务名称
}

type GetServiceInfoResultDataResponseDto struct {
	ServiceName     string            `json:"serviceName"`     // 服务名称
	NameSpace       string            `json:"nameSpace"`       // 命名空间
	Labels          map[string]string `json:"labels"`          // 标签
	Annotations     []string          `json:"annotations"`     // 注解
	Selector        map[string]string `json:"selector"`        // 选择器
	Type            string            `json:"type"`            // 服务类型
	ClusterIP       string            `json:"clusterIP"`       // 集群ip
	SessionAffinity string            `json:"sessionAffinity"` // session保持
	ExternalIPs     []string          `json:"externalIPs"`     // 外部ip
	CreateTime      string            `json:"createTime"`      // 创建时间
}

type GetServicePortListRequestDto struct {
	NameSpace   string `json:"nameSpace"`   // 命名空间
	ServiceName string `json:"serviceName"` // 服务名称
	PageIndex   int    `json:"pageIndex"`
	PageSize    int    `json:"pageSize"`
}

type GetServicePortListResultDataResponseDto struct {
	PortName   string `json:"portName"`   // 端口名称
	Port       int32  `json:"port"`       // 服务端口
	TargetPort string `json:"targetPort"` // 目标端口
	NodePort   string `json:"nodePort"`   // 暴露端口
	Protocol   string `json:"protocol"`   // 传输协议
}

type GetServiceEndPointListRequestDto struct {
	NameSpace   string `json:"nameSpace"`   // 命名空间
	ServiceName string `json:"serviceName"` // 服务名称
	PageIndex   int    `json:"pageIndex"`
	PageSize    int    `json:"pageSize"`
}

type GetServiceEndPointListResultDataResponseDto struct {
	PortName   string   `json:"portName"`   // 端口名称
	EndPoints  []string `json:"endPoints"`  // 端点
	CreateTime string   `json:"createTime"` // 创建时间
	Protocol   string   `json:"protocol"`   // 传输协议
}

// 校验通过yaml文件创建或编辑的服务
type CheckServiceContentRequestDto struct {
	NameSpace   string `json:"nameSpace"`   // 命名空间
	OperateType string `json:"operateType"` // 操作类型 更新、新增
	ServiceName string `json:"serviceName"` // 服务名称
	v1.Service
}

type GetServiceRelatedResourceInfoRequestDto struct {
	NameSpace   string `json:"nameSpace"`   // 命名空间
	ServiceName string `json:"serviceName"` // 服务名称
}

type GetServiceRelatedResourceInfoResultDataResponseDto struct {
	NameSpace          string                                        `json:"nameSpace"`          // 命名空间
	ServiceName        string                                        `json:"serviceName"`        // 服务名称
	ServiceType        string                                        `json:"serviceType"`        // 服务类型
	ControllerNameList []string                                      `json:"controllerNameList"` // 控制器名称 目前仅支持deploy
	Ports              []SaveGuiServiceResourceServicePortRequestDto `json:"ports"`              // 服务端口
}

// 保存通过yaml文件创建或编辑的服务
type SaveServiceResourceRequestDto struct {
	NameSpace   string `json:"nameSpace"`   // 命名空间
	OperateType string `json:"operateType"` // 操作类型 更新、新增
	ServiceName string `json:"serviceName"` // 服务名称
	v1.Service
}

type GetControllerPortListRequestDto struct {
	NameSpace          string   `json:"nameSpace"`          // 命名空间
	ControllerTypeName string   `json:"controllerTypeName"` // 资源类型如deploy sts
	ControllerNameList []string `json:"controllerNameList"` // 部署名称集合
}

// 通过图形界面创建或更新服务
type SaveGuiServiceResourceRequestDto struct {
	NameSpace          string                                        `json:"nameSpace"`          // 命名空间
	OperateType        string                                        `json:"operateType"`        // 操作类型 更新、新增
	ServiceName        string                                        `json:"serviceName"`        // 服务名称
	ServiceType        string                                        `json:"serviceType"`        // 服务类型
	ControllerNameList []string                                      `json:"controllerNameList"` // 控制器名称 目前仅支持deploy
	Ports              []SaveGuiServiceResourceServicePortRequestDto `json:"ports"`              // 服务端口
}

// 通过图形界面创建或更新服务的端口信息
type SaveGuiServiceResourceServicePortRequestDto struct {
	PortName            string `json:"portName"`            // 端口名称
	Port                int32  `json:"port"`                // 端口号 服务端口
	TargetPort          string `json:"targetPort"`          // 目标端口
	Protocol            string `json:"protocol"`            // 传输协议
	NodePort            int32  `json:"nodePort"`            // 暴露端口 服务类型为NodePort时有此值
	AutomaticAllocation bool   `json:"automaticAllocation"` // 是否自动分配 服务类型为NodePort时有此值
}
