package autoops

import (
	"context"
	"time"

	gkev1beta2 "github.com/crossplane-contrib/provider-gcp/apis/container/v1beta2"
	"github.com/go-logr/logr"
	"sigs.k8s.io/controller-runtime/pkg/client"
)

func DeleteGKEClusterIfErrorPersists(ctx context.Context, logger logr.Logger, cli client.Client, gke *gkev1beta2.Cluster) error {
	// there are two known issues when creating gke cluster while the peer cluster is deleting:
	// * Pod CIDR Conflict: Requested CIDR 10.0.0.0/21 for pods is not available:
	//   This should be mitigated by the subnetwork patch request in gke.Delete() task.
	// * MasterIpv4CidrBlock Conflict: Invalid value for field PrivateClusterConfig.MasterIpv4CidrBlock:
	//   For this issue, we have to wait until another gke cluster is deleted completely.
	// TODO: refine the deletion condition.
	if gke.Status.AtProvider.Status == gkev1beta2.ClusterStateError && time.Now().After(gke.CreationTimestamp.Time.Add(5*time.Minute)) {
		logger.Info("Delete GKE Cluster", "name", gke.Name, "status", gke.Status.AtProvider.StatusMessage)
		err := cli.Delete(ctx, gke)
		if err != nil {
			return err
		}
	}
	return nil
}
