package common

import (
	"context"

	corev1 "k8s.io/api/core/v1"
	"sigs.k8s.io/controller-runtime/pkg/log"

	"github.com/tidbcloud/eks-provider/controllers/cluster/task/common/audit"
	cloudv1 "github.com/tidbcloud/infra-api/api/v1"
	"github.com/tidbcloud/infra-provider/pkg/config"
	sdk "github.com/tidbcloud/infra-provider/pkg/gitops-sdk"
)

// resolveAuditSidecarConfig resolves sidecar image and envs.
// It prefers SidecarImageV2 if set, otherwise falls back to SidecarImage.
// If the cluster has an AuditLogSidecarImageTag annotation, that tag is applied
// on top (using BaseImage when configured). If the sidecar version supports
// dynamic log path, envs are returned.
func resolveAuditSidecarConfig(
	ctx context.Context,
	cluster *cloudv1.Cluster,
	cfg config.RootConfig,
	groupName string,
) (image string, sidecarEnvs []corev1.EnvVar) {
	logger := log.FromContext(ctx)

	image = cfg.ClusterController.Audit.SidecarImageV2
	if image == "" {
		image = cfg.ClusterController.Audit.SidecarImage
	}

	resolved := audit.ResolveAuditSidecarImage(ctx, cluster, image, cfg.ClusterController.Audit.BaseImage, groupName)
	image = sdk.OverrideImageWithRepoPrefix(cfg.Override.OverrideRegistry, cfg.Override.OverrideRepoPrefix, resolved.Image)
	sidecarEnvs = resolved.EnvVars

	logger.Info(
		"audit sidecar image resolved",
		"groupName", groupName,
		"image", image,
		"sidecarEnvs", sidecarEnvs,
	)

	return image, sidecarEnvs
}
