// SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
// SPDX-License-Identifier: Apache-2.0

package checkpoint

import (
	commonconsts "github.com/ai-dynamo/dynamo/deploy/operator/internal/consts"
	corev1 "k8s.io/api/core/v1"
)

func EnsurePodInfoVolume(podSpec *corev1.PodSpec) {
	for i := range podSpec.Volumes {
		if podSpec.Volumes[i].Name != commonconsts.PodInfoVolumeName {
			continue
		}
		if podSpec.Volumes[i].DownwardAPI == nil {
			podSpec.Volumes[i].VolumeSource.DownwardAPI = &corev1.DownwardAPIVolumeSource{}
		}
		// Merge required items into existing downwardAPI volume.
		source := podSpec.Volumes[i].DownwardAPI
		pathToIndex := make(map[string]int, len(source.Items))
		for j := range source.Items {
			pathToIndex[source.Items[j].Path] = j
		}
		for _, item := range podInfoItems() {
			if idx, ok := pathToIndex[item.Path]; ok {
				source.Items[idx] = item
				continue
			}
			source.Items = append(source.Items, item)
			pathToIndex[item.Path] = len(source.Items) - 1
		}
		return
	}

	podSpec.Volumes = append(podSpec.Volumes, corev1.Volume{
		Name: commonconsts.PodInfoVolumeName,
		VolumeSource: corev1.VolumeSource{
			DownwardAPI: &corev1.DownwardAPIVolumeSource{
				Items: podInfoItems(),
			},
		},
	})
}

func podInfoItems() []corev1.DownwardAPIVolumeFile {
	return []corev1.DownwardAPIVolumeFile{
		{
			Path: "pod_name",
			FieldRef: &corev1.ObjectFieldSelector{
				FieldPath: commonconsts.PodInfoFieldPodName,
			},
		},
		{
			Path: "pod_uid",
			FieldRef: &corev1.ObjectFieldSelector{
				FieldPath: commonconsts.PodInfoFieldPodUID,
			},
		},
		{
			Path: "pod_namespace",
			FieldRef: &corev1.ObjectFieldSelector{
				FieldPath: commonconsts.PodInfoFieldPodNamespace,
			},
		},
		{
			Path: commonconsts.PodInfoFileDynNamespace,
			FieldRef: &corev1.ObjectFieldSelector{
				FieldPath: "metadata.labels['" + commonconsts.KubeLabelDynamoNamespace + "']",
			},
		},
		{
			Path: commonconsts.PodInfoFileDynNamespaceWorkerSuffix,
			FieldRef: &corev1.ObjectFieldSelector{
				FieldPath: "metadata.labels['" + commonconsts.KubeLabelDynamoWorkerHash + "']",
			},
		},
		{
			Path: commonconsts.PodInfoFileDynComponent,
			FieldRef: &corev1.ObjectFieldSelector{
				FieldPath: "metadata.labels['" + commonconsts.KubeLabelDynamoComponentType + "']",
			},
		},
		{
			Path: commonconsts.PodInfoFileDynParentDGDName,
			FieldRef: &corev1.ObjectFieldSelector{
				FieldPath: "metadata.labels['" + commonconsts.KubeLabelDynamoGraphDeploymentName + "']",
			},
		},
		{
			Path: commonconsts.PodInfoFileDynParentDGDNamespace,
			FieldRef: &corev1.ObjectFieldSelector{
				FieldPath: commonconsts.PodInfoFieldPodNamespace,
			},
		},
	}
}

func EnsurePodInfoMount(container *corev1.Container) {
	for _, mount := range container.VolumeMounts {
		if mount.Name == commonconsts.PodInfoVolumeName {
			return
		}
	}

	container.VolumeMounts = append(container.VolumeMounts, corev1.VolumeMount{
		Name:      commonconsts.PodInfoVolumeName,
		MountPath: commonconsts.PodInfoMountPath,
		ReadOnly:  true,
	})
}
