package piwigo

import (
	"encoding/json"
	"errors"
	"os"
	"strings"
)

func (p *Piwigo) ConfigPath() (configPath string, err error) {
	configDir, err := os.UserConfigDir()
	if err == nil {
		configPath = strings.Join([]string{configDir, "piwigo-cli"}, "/")
	}
	return
}

func (p *Piwigo) CreateConfigDir() (configPath string, err error) {
	configPath, err = p.ConfigPath()
	if err != nil {
		return
	}

	err = os.MkdirAll(configPath, os.FileMode(0700))
	return
}

func (p *Piwigo) SaveConfig() (err error) {
	configPath, err := p.CreateConfigDir()
	if err != nil {
		return
	}

	configFile := strings.Join([]string{configPath, "config.json"}, "/")

	b, err := json.MarshalIndent(p, "", "  ")
	if err != nil {
		return err
	}

	err = os.WriteFile(configFile, b, os.FileMode(0700))
	return err
}

func (p *Piwigo) LoadConfig() (err error) {
	configPath, err := p.ConfigPath()
	if err != nil {
		return
	}

	configFile := strings.Join([]string{configPath, "config.json"}, "/")
	b, err := os.ReadFile(configFile)
	if err != nil {
		if os.IsNotExist(err) {
			err = errors.New("missing configuration file")
		}
		return
	}

	err = json.Unmarshal(b, &p)

	if p.Url == "" || p.Username == "" || p.Password == "" {
		err = errors.New("missing configuration url or token")
	}

	return
}