package sugar

import (
	"fmt"
	"log/slog"
	"os"
	"path/filepath"
	"strconv"
)

func EnsureDir(dirPath ...string) (string, error) {
	outPath := filepath.Join(dirPath...)
	if len(outPath) < 3 {
		return "", fmt.Errorf("the path is short to be a folder: %s", outPath)
	}

	if _, err := os.Stat(outPath); os.IsNotExist(err) {
		var dirMod uint64
		if dirMod, err = strconv.ParseUint("0775", 8, 32); err == nil {
			err = os.Mkdir(outPath, os.FileMode(dirMod))
		}

		if err != nil && !os.IsExist(err) {
			slog.Error("error creating tmp dir", "err", err)
		}
	}

	return outPath, nil
}

func WriteDataToTmpFile(content, fp string) (int, string, error) {
	dir, err := EnsureDir(os.TempDir(), "mdb")
	if err != nil {
		slog.Error("EnsureDir", "err", err.Error())
		return 0, dir, err
	}

	fp = filepath.Join(dir, fp)

	f, err := os.Create(fp)
	if err != nil {
		slog.Error("CreateFile", "e", err)
		return 0, fp, err
	}

	filesize, err := f.WriteString(content)
	if err != nil {
		slog.Error("WriteString", "e", err)
		return 0, fp, err
	}

	err = f.Close()
	if err != nil {
		slog.Error("CloseFile", "e", err)
		return 0, fp, err
	}

	return filesize, fp, nil
}

/*
	REMOVED_FROM_MMT_DUE_TO_REDOING_OF_THE_EVENT_LOG
*/