package config

import (
	"encoding/json"
	"fmt"
	"os"
	"path"

	"gitlab.com/uafrica/go-utils/errors"
	"gitlab.com/uafrica/go-utils/logger"
)

func LoadLocal() error {
	configDir, err := os.Getwd()
	if err != nil {
		return errors.Wrapf(err, "cannot get working directory")
	}
	configFilename := "config.local.json"
	for {
		fn := configDir + "/" + configFilename
		f, err := os.Open(fn)
		if err != nil {
			logger.Debugf("%s not found in %s", configFilename, configDir)
			parentDir := path.Dir(configDir)
			if parentDir == configDir {
				return errors.Errorf("did not find file %s in working dir or any parent dir", configFilename)
			}
			configDir = parentDir
			continue
		}

		defer f.Close()

		var config map[string]interface{}
		if err := json.NewDecoder(f).Decode(&config); err != nil {
			return errors.Wrapf(err, "failed to decode JSON from file %s", fn)
		}

		for n, v := range config {
			vs := fmt.Sprintf("%v", v)
			os.Setenv(n, vs)
			logger.Debugf("Defined local config %s=%s", n, vs)
		}

		return nil
	}
} //LoadLocal()