package main

import (
	"context"
	"fmt"
	kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1alpha1"
	"github.com/spf13/cobra"
	"k8s.io/apimachinery/pkg/types"
)

var suspendKsCmd = &cobra.Command{
	Use:     "kustomization [name]",
	Aliases: []string{"ks"},
	Short:   "Suspend kustomization",
	Long:    "The suspend command disables the reconciliation of a Kustomization resource.",
	RunE:    suspendKsCmdRun,
}

func init() {
	suspendCmd.AddCommand(suspendKsCmd)
}

func suspendKsCmdRun(cmd *cobra.Command, args []string) error {
	if len(args) < 1 {
		return fmt.Errorf("kustomization name is required")
	}
	name := args[0]

	ctx, cancel := context.WithTimeout(context.Background(), timeout)
	defer cancel()

	kubeClient, err := utils.kubeClient(kubeconfig)
	if err != nil {
		return err
	}

	namespacedName := types.NamespacedName{
		Namespace: namespace,
		Name:      name,
	}
	var kustomization kustomizev1.Kustomization
	err = kubeClient.Get(ctx, namespacedName, &kustomization)
	if err != nil {
		return err
	}

	logAction("suspending kustomization %s in %s namespace", name, namespace)
	kustomization.Spec.Suspend = true
	if err := kubeClient.Update(ctx, &kustomization); err != nil {
		return err
	}
	logSuccess("kustomization suspended")

	return nil
}