package progress

import (
	"context"
	"time"

	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"sigs.k8s.io/controller-runtime/pkg/client"

	cloudv1 "github.com/tidbcloud/infra-api/api/v1"
)

const FirstPassAnnPrefix = "first-pass-when-creating.cloud.pingcap.com/"

func UpdateAnnForFirstPassIfNeed(obj metav1.Object, name string) (updated bool) {
	ann := obj.GetAnnotations()

	key := FirstPassAnnPrefix + name
	if _, ok := ann[key]; ok {
		return false
	}

	age := time.Since(obj.GetCreationTimestamp().Time)
	if ann == nil {
		ann = map[string]string{}
	}
	ann[key] = age.String()
	obj.SetAnnotations(ann)
	return true
}

func UpdateNetworkAnnForFirstPassIfNeed(ctx context.Context, cli client.Client, obj *cloudv1.Network, name string) error {
	updated := UpdateAnnForFirstPassIfNeed(obj, name)
	if !updated {
		return nil
	}

	err := cli.Update(ctx, obj)
	return err
}

func UpdateClusterAnnForFirstPassIfNeed(ctx context.Context, cli client.Client, obj *cloudv1.Cluster, name string) error {
	updated := UpdateAnnForFirstPassIfNeed(obj, name)
	if !updated {
		return nil
	}

	err := cli.Update(ctx, obj)
	return err
}
