package worker

import (
	"path/filepath"
	"strings"
)

// translatePath переводит путь, как его сообщает qBittorrent API (save_path),
// в путь, видимый jellybit на хосте. Применяет самое длинное совпадение
// префикса из path_map (ключ — префикс в адресации qBit, значение — префикс на
// хосте). Совпадение — только по границам сегментов: ключ `/data` подходит для
// `/data` и `/data/x`, но не для `/data2`.
//
// Обычно path_map пуст — все медиа-приложения монтируют /srv/media:/srv/media
// идентично, поэтому путь из API уже равен хост-пути и возвращается как есть.
// Фолбэк нужен, если адресация qBit и jellybit разойдётся (см.
// docs/architecture.md).
func translatePath(p string, pathMap map[string]string) string {
	if len(pathMap) == 0 || p == "" {
		return p
	}
	clean := filepath.Clean(p)

	bestKey, bestVal := "", ""
	for key, val := range pathMap {
		k := filepath.Clean(key)
		if clean != k && !strings.HasPrefix(clean, k+string(filepath.Separator)) {
			continue
		}
		if len(k) > len(bestKey) {
			bestKey, bestVal = k, val
		}
	}
	if bestKey == "" {
		return p
	}
	return filepath.Join(filepath.Clean(bestVal), strings.TrimPrefix(clean, bestKey))
}
