import pytest

from src.core.exceptions import ValidationError
from src.domain.prompt_media.compose import build_multimodal_prompt_appendix
from src.domain.prompt_media.validate import assert_allowed_mime


@pytest.mark.parametrize(
    ("mime_type", "filename"),
    [
        ("text/csv", "customers.csv"),
        ("application/csv", "customers.csv"),
        ("application/vnd.ms-excel", "customers.csv"),
        ("application/json", "catalog.json"),
        ("application/ndjson", "events.ndjson"),
        ("application/octet-stream", "legacy-export.csv"),
    ],
)
def test_prompt_media_accepts_structured_data_attachments(mime_type, filename):
    assert_allowed_mime(mime_type, filename)


def test_prompt_media_rejects_unknown_octet_stream_attachment():
    with pytest.raises(ValidationError):
        assert_allowed_mime("application/octet-stream", "payload.exe")


@pytest.mark.parametrize(
    ("mime_type", "filename"),
    [
        ("text/markdown", "brief.md"),
        ("application/msword", "brief.doc"),
        (
            "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
            "brief.docx",
        ),
        ("application/octet-stream", "brief.docx"),
    ],
)
def test_prompt_media_accepts_guest_builder_document_formats(mime_type, filename):
    assert_allowed_mime(mime_type, filename)


def test_dataset_attachment_prompt_guides_codegen_to_data_import():
    appendix = build_multimodal_prompt_appendix(
        copied_files=[("0_customers.csv", "file")],
        repo_subdir=".p2hs-user-uploads/run-id",
    )

    assert ".p2hs-user-uploads/run-id" in appendix
    assert "seed datasets" in appendix
    assert "PlatformBackendCapabilities `data_import`" in appendix
    assert "record engine" in appendix
