package utils

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

// StripMountPoint removes OS-specific mount point prefixes from a path
func StripMountPoint(absPath string) string {
	// Clean path first
	absPath = filepath.Clean(absPath)

	// Handle Windows drive letters
	if runtime.GOOS == "windows" {
		volumeName := filepath.VolumeName(absPath)
		if volumeName != "" {
			// Remove "C:\" and return rest
			return strings.TrimPrefix(absPath, volumeName+string(filepath.Separator))
		}
	}

	// Handle Unix-like mount points
	switch {
	case absPath == "/Volumes":
		// Exact match to mount point root
		return "."

	case strings.HasPrefix(absPath, "/Volumes/"):
		// macOS external volumes: /Volumes/Drive/... → Drive/...
		return strings.TrimPrefix(absPath, "/Volumes/")

	case strings.HasPrefix(absPath, "/media/"):
		// Linux user mounts: /media/username/Drive/... → Drive/...
		// Strip /media/ and the username directory
		pathAfterMedia := strings.TrimPrefix(absPath, "/media/")
		parts := strings.SplitN(pathAfterMedia, string(filepath.Separator), 2)
		if len(parts) > 1 {
			return parts[1] // Return everything after username
		}
		// Just username, no subdirectory (e.g., /media/david)
		return "."

	case strings.HasPrefix(absPath, "/mnt/"):
		// Linux system mounts: /mnt/storage/... → storage/...
		return strings.TrimPrefix(absPath, "/mnt/")
	}

	// No known mount point detected, return as-is
	return absPath
}

// NormalizeFolderPath strips mount points and cleans up a folder path
// Unlike a file path normalization, this expects a directory path
func NormalizeFolderPath(folderPath string) string {
	// Clean the path
	folderPath = filepath.Clean(folderPath)

	// Strip mount point
	relativePath := StripMountPoint(folderPath)

	// Clean up leading/trailing slashes
	relativePath = strings.Trim(relativePath, string(filepath.Separator))

	return relativePath
}