package controller

import (
	"fmt"
	"github.com/pingcap/log"
	"go.uber.org/zap"
	corev1 "k8s.io/api/core/v1"
	"k8s.io/apimachinery/pkg/api/errors"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

func (c *Controller) GetConfigMap(namespace, name string) (*corev1.ConfigMap, error) {
	cm, err := c.kubeCli.CoreV1().ConfigMaps(namespace).Get(name, metav1.GetOptions{})
	if err != nil {
		emsg := fmt.Errorf("failed to get configmap[%s] in namespace[%s], err: %v", name, namespace, err)
		log.Error("get configmap", zap.Error(emsg))
		return nil, errors.NewInternalError(emsg)
	}

	log.Info("get configmap", zap.String("name", name), zap.String("namespace", namespace), zap.Any("data", cm.Data))
	return cm, nil
}

func (c *Controller) UpdateConfigMap(namespace string, cm *corev1.ConfigMap) (*corev1.ConfigMap, error) {
	result, err := c.kubeCli.CoreV1().ConfigMaps(namespace).Update(cm)
	if err != nil {
		emsg := fmt.Errorf("failed to update configmap[%s] in namespace[%s], err: %v", cm.GetName(), namespace, err)
		log.Error("update configmap", zap.Error(emsg))
		return nil, errors.NewInternalError(emsg)
	}

	log.Info("update configmap", zap.String("name", cm.GetName()), zap.String("namespace", namespace), zap.Any("data", result.Data))
	return result, nil
}
