package csv

import (
	"encoding/csv"
	"encoding/json"
	"os"
	"time"

	"jonasled.dev/jonasled/ems-esp-logger/helper"
)

func JsonToCsv(jsonData string) {
	var data map[string]interface{}
	if err := json.Unmarshal([]byte(jsonData), &data); err != nil {
		panic(err)
	}

	currentDate := time.Now().Local().Format("2006-01-02 15:04:05")

	file, err := os.OpenFile(os.Getenv("OUTPUT_FILE_NAME"), os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
	if err != nil {
		panic(err)
	}
	defer file.Close()

	// Create a CSV writer
	writer := csv.NewWriter(file)
	defer writer.Flush()

	// Check if file is empty to write header
	fileInfo, err := file.Stat()
	if err != nil {
		panic(err)
	}

	// Sort keys for consistent column order
	keys := helper.SortMapKeys(data)

	// Write the header if the file is empty
	if fileInfo.Size() == 0 {
		header := append([]string{"Date"}, keys...)
		if err := writer.Write(header); err != nil {
			panic(err)
		}
	}

	// Write data row with the current date
	row := []string{currentDate}
	for _, key := range keys {
		row = append(row, helper.AnyToString(data[key]))
	}
	if err := writer.Write(row); err != nil {
		panic(err)
	}
}