package gcp

import (
	"context"
	"fmt"

	containerapiv1 "cloud.google.com/go/container/apiv1"
	"cloud.google.com/go/container/apiv1/containerpb"
)

type ClusterManagerClient interface {
	GetCluster(ctx context.Context, project, location, name string) (*containerpb.Cluster, error)
}

type clusterClient struct {
	cc *containerapiv1.ClusterManagerClient
}

func NewClusterManagerClient(ctx context.Context) (ClusterManagerClient, error) {
	cc, err := containerapiv1.NewClusterManagerClient(ctx)
	if err != nil {
		return nil, err
	}

	return &clusterClient{
		cc: cc,
	}, nil
}

func (c *clusterClient) GetCluster(ctx context.Context, project, location, name string) (*containerpb.Cluster, error) {
	cluster, err := c.cc.GetCluster(ctx, &containerpb.GetClusterRequest{
		Name: fmt.Sprintf(gkeURLTemplate, project, location, name),
	})

	if err != nil {
		return nil, fmt.Errorf("cannot get gke cluster: %w", err)
	}

	return cluster, nil
}
