// Copyright (c) 2024-2026 Celestino Amoroso (celestino.amoroso@gmail.com).
// All rights reserved.

//go:build unix

// utils-unix.go
package util

import (
	"os"
	"os/user"
	"path"
	"strings"
)

func ExpandPath(sourcePath string) (expandedPath string, err error) {
	for expandedPath = os.ExpandEnv(sourcePath); expandedPath != sourcePath; expandedPath = os.ExpandEnv(sourcePath) {
		sourcePath = expandedPath
	}

	if strings.HasPrefix(sourcePath, "~") {
		var home, userName, remainder string

		slashPos := strings.IndexRune(sourcePath, '/')
		if slashPos > 0 {
			userName = sourcePath[1:slashPos]
			remainder = sourcePath[slashPos:]
		} else {
			userName = sourcePath[1:]
		}

		if len(userName) == 0 {
			home, err = os.UserHomeDir()
			if err != nil {
				return
			}
		} else {
			var userInfo *user.User
			userInfo, err = user.Lookup(userName)
			if err != nil {
				return
			}
			home = userInfo.HomeDir
		}
		expandedPath = path.Join(home, remainder)
	}
	return
}
