"""Tests for archive extract object key mapping."""
from src.domain.storage_ingest.archive_paths import (
    apply_connection_prefix,
    connection_path_prefix,
    flatten_archive_relative_path,
    object_key_for_extracted_file,
    staging_file_is_visible,
)


def test_flatten_archive_relative_path():
    assert flatten_archive_relative_path("a.png") == "a.png"
    assert flatten_archive_relative_path("folder/a.png") == "folder-a.png"
    assert flatten_archive_relative_path("folder/sub/a.png") == "folder-sub-a.png"


def test_object_key_for_extracted_file_preserve():
    assert object_key_for_extracted_file(
        prefix="hs-images",
        relative="folder/a.png",
        archive_path_mode="preserve_folders",
    ) == "hs-images/folder/a.png"


def test_object_key_for_extracted_file_flatten():
    assert object_key_for_extracted_file(
        prefix="hs-images",
        relative="folder/sub/a.png",
        archive_path_mode="flatten",
    ) == "hs-images/folder-sub-a.png"


def test_connection_path_prefix_normalizes():
    assert connection_path_prefix(None) == ""
    assert connection_path_prefix({"path_prefix": "/uploads/2026/"}) == "uploads/2026"


def test_apply_connection_prefix_skips_when_already_prefixed():
    assert apply_connection_prefix("", "file.png") == "file.png"
    assert apply_connection_prefix("uploads", "file.png") == "uploads/file.png"
    assert apply_connection_prefix("uploads", "uploads/file.png") == "uploads/file.png"


def test_staging_file_is_visible():
    import tempfile
    from pathlib import Path

    rel = "ws/proj/ingest/job/a.bin"
    with tempfile.TemporaryDirectory() as raw:
        root = Path(raw)
        abs_path = root / "ws" / "proj" / "ingest" / "job" / "a.bin"
        abs_path.parent.mkdir(parents=True)
        abs_path.write_bytes(b"ok")
        assert staging_file_is_visible(str(root), rel) is True
        assert staging_file_is_visible(str(root), "missing.bin") is False
