package grpc_service

import (
	"context"

	pb "github.com/tidbcloud/config-center/proto/config_center"
	"google.golang.org/grpc/codes"
	"google.golang.org/grpc/status"
)

func (s ConfigCenterService) ListAvailableVersions(ctx context.Context, req *pb.ListAvailableVersionsRequest) (*pb.ListAvailableVersionsResponse, error) {
	component := req.GetComponent()
	if req.GetClusterType() == pb.ClusterType_DEDICATED_TIDB && component == "" {
		component = "tidb"
	}
	versions, err := s.DB.ListVersionsFromComponentImage(req.GetClusterType().String(), component)
	if err != nil {
		return nil, status.Error(codes.Internal, err.Error())
	}
	return &pb.ListAvailableVersionsResponse{Versions: versions}, nil
}

func (s ConfigCenterService) ListAvailableInstances(ctx context.Context, req *pb.ListAvailableInstancesRequest) (*pb.ListAvailableInstancesResponse, error) {
	instances, err := s.DB.ListAvailableInstancesFromDefaultTemplate(req.GetClusterType().String(), req.ConfigType, req.Version)
	if err != nil {
		return nil, status.Error(codes.Internal, err.Error())
	}
	resp := &pb.ListAvailableInstancesResponse{Instances: []*pb.UniqueInstance{}}
	for _, instance := range instances {
		if instance.CloudProvider == "" || instance.NodeInstance == "" {
			continue
		}
		resp.Instances = append(resp.Instances, &pb.UniqueInstance{
			CloudProvider: instance.CloudProvider,
			NodeInstance:  instance.NodeInstance,
		})
	}
	return resp, nil
}
