package main

import (
	"context"

	sourcev1 "github.com/fluxcd/source-controller/api/v1alpha1"
	"github.com/spf13/cobra"
	corev1 "k8s.io/api/core/v1"
	"sigs.k8s.io/controller-runtime/pkg/client"
)

var getSourceGitCmd = &cobra.Command{
	Use:   "git",
	Short: "Get git sources status",
	Long: `
The get sources command prints the status of the git resources.`,
	RunE: getSourceGitCmdRun,
}

func init() {
	getSourceCmd.AddCommand(getSourceGitCmd)
}

func getSourceGitCmdRun(cmd *cobra.Command, args []string) error {
	ctx, cancel := context.WithTimeout(context.Background(), timeout)
	defer cancel()

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

	var list sourcev1.GitRepositoryList
	err = kubeClient.List(ctx, &list, client.InNamespace(namespace))
	if err != nil {
		return err
	}

	if len(list.Items) == 0 {
		logFailure("no sources found in %s namespace", namespace)
		return nil
	}

	for _, source := range list.Items {
		isInitialized := false
		for _, condition := range source.Status.Conditions {
			if condition.Type == sourcev1.ReadyCondition {
				if condition.Status != corev1.ConditionFalse {
					logSuccess("%s last fetched revision %s", source.GetName(), source.Status.Artifact.Revision)
				} else {
					logFailure("%s %s", source.GetName(), condition.Message)
				}
				isInitialized = true
				break
			}
		}
		if !isInitialized {
			logFailure("%s is not ready", source.GetName())
		}
	}
	return nil
}