//go:generate ${GOBIN}/dummygen -d=service_dummy.go -package=infrainfo ${GO_MODULE}/pkg/service/k8supgrade/infrainfo ServiceAPI
//go:generate ${GOBIN}/mockgen -destination api_mock.go -package=infrainfo ${GO_MODULE}/pkg/service/k8supgrade/infrainfo ServiceAPI
package infrainfo

import (
	"context"

	"github.com/tidbcloud/devops/entity/k8supgrade"
)

type ListK8SInformationReq struct {
	CloudProvider string `json:"cloud_provider"`
	Version       string `json:"version"`
}

type GetK8SInformationReq struct {
	CloudProvider string `json:"cloud_provider"`
	Region        string `json:"region"`
	Name          string `json:"name"`
}

type CommonUpgradeOperationReq struct {
	Namespace        string                       `json:"namespace"`
	Name             string                       `json:"name"`
	CloudProvider    string                       `json:"cloud_provider"`
	Region           string                       `json:"region"`
	UpgradeOperation *k8supgrade.UpgradeOperation `json:"upgrade_operation,omitempty"`
}

type PatchUpgradeOperationAnnotationsReq struct {
	Namespace     string            `json:"namespace"`
	Name          string            `json:"name"`
	CloudProvider string            `json:"cloud_provider"`
	Region        string            `json:"region"`
	Annotations   map[string]string `json:"annotations"`
}

type ServiceAPI interface {
	ListK8SInformation(ctx context.Context, req *ListK8SInformationReq) (k8supgrade.K8sInfoList, error)
	GetK8sInformation(ctx context.Context, req *GetK8SInformationReq) (*k8supgrade.K8sInfo, error)

	GetUpgradeOperation(ctx context.Context, req *CommonUpgradeOperationReq) (*k8supgrade.UpgradeOperation, error)
	PauseUpgradeOperation(ctx context.Context, req *CommonUpgradeOperationReq) error
	DeleteUpgradeOperation(ctx context.Context, req *CommonUpgradeOperationReq) error
	CreateOrUpdateUpgradeOperation(ctx context.Context, req *CommonUpgradeOperationReq) error
	PatchUpgradeOperationAnnotations(ctx context.Context, req *PatchUpgradeOperationAnnotationsReq) error
}
