package sys

import (
	"os"
	"path/filepath"
	"runtime"
)

// HomeDir return user home directory
func HomeDir() string {
	if runtime.GOOS == "windows" {
		return os.Getenv("HOMEDRIVE") + os.Getenv("HOMEPATH")
	}
	if h := os.Getenv("HOME"); h != "" {
		return h
	}
	return "/"
}

// HiddenFile get hidden file prefix
func HiddenFile(name string) string {
	switch runtime.GOOS {
	case "windows":
		return "~" + name
	default:
		return "." + name
	}
}

// CacheDir return user cache directory
func CacheDir() string {
	switch runtime.GOOS {
	case "darwin":
		return filepath.Join(HomeDir(), "Library", "Caches")
	case "windows":
		for _, ev := range []string{"APPDATA", "CSIDL_APPDATA", "TEMP", "TMP"} {
			if v := os.Getenv(ev); v != "" {
				return v
			}
		}
		// Worst case:
		return HomeDir()
	}
	if xdg := os.Getenv("XDG_CACHE_HOME"); xdg != "" {
		return xdg
	}
	return filepath.Join(HomeDir(), ".cache")
}