package statementlog

import (
	"github.com/pingcap/tidb-operator/pkg/apis/pingcap/v1alpha1"
	corev1 "k8s.io/api/core/v1"
	"k8s.io/apimachinery/pkg/api/resource"

	"github.com/tidbcloud/infra-provider/pkg/config"
)

func Overlay(tc *v1alpha1.TidbCluster) {
	// Only append statementlog sidecar for newly created cluster.
	if tc.CreationTimestamp.IsZero() {
		sidecar := BuildSidecar(config.GetBusyboxImage())
		tc.Spec.TiDB.AdditionalContainers = addContainerIfNotExist(tc.Spec.TiDB.AdditionalContainers, sidecar)
	}
}

func BuildSidecar(img string) corev1.Container {
	return corev1.Container{
		Name:  "statementlog",
		Image: img,
		Command: []string{
			"sh",
			"-c",
			"touch /var/log/auditlog/tidb-statements.log; tail -n0 -F /var/log/auditlog/tidb-statements.log;",
		},
		Resources: corev1.ResourceRequirements{
			Limits: corev1.ResourceList{
				corev1.ResourceCPU:    resource.MustParse("100m"),
				corev1.ResourceMemory: resource.MustParse("50Mi"),
			},
			Requests: corev1.ResourceList{
				corev1.ResourceCPU:    resource.MustParse("0m"),
				corev1.ResourceMemory: resource.MustParse("0Mi"),
			},
		},
		VolumeMounts: []corev1.VolumeMount{
			{
				Name:      "tidb-slowlog",
				MountPath: "/var/log/auditlog",
			},
		},
	}
}

func addContainerIfNotExist(containers []corev1.Container, c corev1.Container) []corev1.Container {
	for _, entry := range containers {
		if entry.Name == c.Name {
			return containers
		}
	}
	return append(containers, c)
}
