package handler

import (
	"encoding/json"
	"fmt"
	"io"
	"net/http"
)

func (h *Handler) EncryptData(w http.ResponseWriter, r *http.Request) {
	//ctx := context.Background()
	var cipherText string

	reqBody, err := io.ReadAll(r.Body)
	if err != nil {
		h.Logger.Error("Invalid data received", "error", err)
		fmt.Fprintf(w, "Invalid data received")
		w.WriteHeader(http.StatusInternalServerError)
		return
	} else {
		h.Logger.Debug("received input data", "length", len(reqBody))
	}

	// get the json input
	var input map[string]string
	if err := json.Unmarshal(reqBody, &input); err != nil {
		h.Logger.Error("unable to unmarshal json", "error", err)
		prettyPrint(reqBody)
		w.Header().Set("Content-Type", "application/json")
		w.WriteHeader(http.StatusInternalServerError)
		json.NewEncoder(w).Encode(map[string]string{
			"status":  "ERROR",
			"message": fmt.Sprintf("Unable to unmarshal JSON in request body: '%s'", err),
		})
		return
	} else {
		h.Logger.Debug("successfully decoded JSON")
		//prettyPrint(input)
	}

	//cipher, err := h.Secret.Encrypt()
	for k := range input {
		//h.Logger.Debug("foo", "key", k, "value", input[k])
		cipherText, err = h.Secret.Encrypt([]byte(input[k]))
		if err != nil {
			h.Logger.Error("Unable to encrypt", "error", err)
		} else {
			h.Logger.Debug("Encrypted plaintext", "length", len(input[k]), "ciphertext", cipherText)
			w.WriteHeader(http.StatusOK)
			json.NewEncoder(w).Encode(map[string]string{
				"status":  "OK",
				"message": cipherText,
			})
			return
		}

	}

	// return the result

}
