"""Tests para pdf_merge."""

import sys
import os
import tempfile
import pytest

sys.path.insert(0, os.path.dirname(__file__))
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "..", "..", "python", "types", "infra"))

from pdf_create import pdf_create
from pdf_add_page import pdf_add_page
from pdf_add_text import pdf_add_text
from pdf_save import pdf_save
from pdf_merge import pdf_merge


def _create_pdf(path: str, text: str) -> str:
    doc = pdf_create(title=text)
    doc = pdf_add_page(doc)
    doc = pdf_add_text(doc, text)
    return pdf_save(doc, path)


def test_fusionar_dos_pdfs():
    with tempfile.TemporaryDirectory() as tmpdir:
        p1 = _create_pdf(os.path.join(tmpdir, "a.pdf"), "Documento A")
        p2 = _create_pdf(os.path.join(tmpdir, "b.pdf"), "Documento B")
        out = os.path.join(tmpdir, "merged.pdf")
        result = pdf_merge([p1, p2], out)
        assert result == out
        assert os.path.exists(out)
        # Verificar que el PDF combinado es valido y mas grande que cada parte
        with open(out, "rb") as f:
            content = f.read()
        assert content[:4] == b"%PDF"


def test_error_si_archivo_no_existe():
    with tempfile.TemporaryDirectory() as tmpdir:
        out = os.path.join(tmpdir, "merged.pdf")
        with pytest.raises(FileNotFoundError):
            pdf_merge(["/no/existe.pdf"], out)


def test_error_si_lista_vacia():
    with tempfile.TemporaryDirectory() as tmpdir:
        out = os.path.join(tmpdir, "merged.pdf")
        with pytest.raises(ValueError):
            pdf_merge([], out)
