package configmanager

import (
	"k8s.io/utils/pointer"
	"sigs.k8s.io/controller-runtime/pkg/client"

	cloudv1 "github.com/tidbcloud/infra-api/api/v1"
	gitops "github.com/tidbcloud/infra-provider/pkg/gitops-sdk"
)

// OverrideRevisionFinder overrides the revision finder to override images
func OverrideRevisionFinder(infraCli client.Client) RevisionFinder {
	return func(c *cloudv1.Cluster) (*cloudv1.ConfigRevision, error) {
		rev, err := RevFinderBuilder(infraCli)(c)
		if err != nil {
			return nil, err
		}

		// override images by regional registry.
		rev.Spec.PD.BaseImage = pointer.String(gitops.OverrideBaseImage(c, *rev.Spec.PD.BaseImage))
		rev.Spec.TiDB.BaseImage = pointer.String(gitops.OverrideBaseImage(c, *rev.Spec.TiDB.BaseImage))
		rev.Spec.TiKV.BaseImage = pointer.String(gitops.OverrideBaseImage(c, *rev.Spec.TiKV.BaseImage))
		if rev.Spec.Backup != nil {
			rev.Spec.Backup.BaseImage = pointer.String(gitops.OverrideBaseImage(c, *rev.Spec.Backup.BaseImage))
		}
		if rev.Spec.Restore != nil {
			rev.Spec.Restore.BaseImage = pointer.String(gitops.OverrideBaseImage(c, *rev.Spec.Restore.BaseImage))
		}
		if rev.Spec.TiFlash != nil {
			rev.Spec.TiFlash.BaseImage = pointer.String(gitops.OverrideBaseImage(c, *rev.Spec.TiFlash.BaseImage))
		}
		if rev.Spec.TiProxy != nil {
			rev.Spec.TiProxy.BaseImage = pointer.String(gitops.OverrideBaseImage(c, *rev.Spec.TiProxy.BaseImage))
		}
		return rev, nil
	}
}
