package toml

import (
	"github.com/pelletier/go-toml/v2"
	"matrix-middle-service/pkg/config"
	"os"
	"path/filepath"
)

func GenerateConfig() error {
	p, _ := filepath.Abs("./config.toml")

	flag := os.O_RDWR
	_, err := os.Stat(p)
	exist := !os.IsNotExist(err)

	if !exist {
		f, err := os.OpenFile(p, flag|os.O_CREATE, 0644)
		if err != nil {
			return err
		}
		defer func() {
			_ = f.Close()
		}()
		encoder := toml.NewEncoder(f)
		encoder.SetIndentTables(true)
		_ = encoder.Encode(config.DefaultConfig())
		_ = f.Sync()
	}

	return nil
}

func LoadConfig() (*config.Conf, error) {
	p, _ := filepath.Abs("./config.toml")

	flag := os.O_RDWR
	_, err := os.Stat(p)
	exist := !os.IsNotExist(err)

	if !exist {
		f, err := os.OpenFile(p, flag|os.O_CREATE, 0644)
		if err != nil {
			return nil, err
		}
		defer func() {
			_ = f.Close()
		}()
		encoder := toml.NewEncoder(f)
		encoder.SetIndentTables(true)
		_ = encoder.Encode(config.DefaultConfig())
		_ = f.Sync()
	}

	f, err := os.OpenFile(p, flag, 0644)
	if err != nil {
		return nil, err
	}
	defer func() {
		_ = f.Close()
	}()

	c := &config.Conf{}
	decoder := toml.NewDecoder(f)
	err = decoder.Decode(c)
	if err != nil {
		return nil, err
	}

	return c, nil
}
