"""User-supplied file path resolution.

bash `resolve_brief_path`, `resolve_clarification_response_path`,
`relative_to_project_root` 의 python 구현. 우선순위: 절대/cwd-기준 → project
root 기준 → None.
"""
from __future__ import annotations

from pathlib import Path
from typing import Optional


def resolve_user_file(raw: str, project_root: Path) -> Optional[Path]:
    """`raw` 가 (a) 절대경로 또는 cwd 기준으로 존재하면 그 절대경로
    (b) project_root 기준으로 존재하면 그 경로 (c) 둘 다 실패면 None.

    bash 구현과 동일 의미. cwd-우선이 의도된 동작이다 — 사용자가 IDE 에서
    프로젝트 일부 디렉터리에 cd 한 채 상대경로를 줄 수 있어야 함.
    """
    if not raw:
        return None
    p = Path(raw)
    if p.is_file():
        return p.resolve()
    if not p.is_absolute():
        in_root = Path(project_root) / raw
        if in_root.is_file():
            return in_root.resolve()
    return None


def relative_to_project_root(path: Path, project_root: Path) -> str:
    """project_root 안의 경로면 그 기준 상대경로 문자열을, 바깥이면 입력값
    그대로 돌려준다."""
    project_root = Path(project_root).resolve()
    path = Path(path)
    try:
        return str(path.resolve().relative_to(project_root))
    except (ValueError, OSError):
        return str(path)
