"""Validation helpers for remote absolute paths (SSH file operations)."""

from __future__ import annotations

from server.utils.posix_paths import (
    PosixPathError,
    normalize_remote_abs_path,
    normalize_remote_dest,
    remote_join,
)

# Backward-compatible alias used by API layers
RemotePathError = PosixPathError

__all__ = [
    "RemotePathError",
    "normalize_remote_abs_path",
    "normalize_remote_dest",
    "remote_join",
    "assert_clipboard_transfer_safe",
]


def assert_clipboard_transfer_safe(sources: list[str], dest_dir: str) -> tuple[list[str], str]:
    """Return normalized sources and dest_dir; raise RemotePathError if unsafe."""
    dest = normalize_remote_abs_path(dest_dir)
    normalized: list[str] = []
    for raw in sources:
        src = normalize_remote_abs_path(raw)
        if dest == src or dest.startswith(src + "/"):
            raise RemotePathError(f"目标目录不能是源路径自身或其子目录: {src}")
        normalized.append(src)
    return normalized, dest
