"""Geração de arquivos markdown a partir dos resultados OCR."""

from __future__ import annotations

from datetime import datetime
from pathlib import Path

from .engine import PdfResult


def write_text_markdown(result: PdfResult, output_dir: Path) -> Path:
    """Gera markdown no modo text (PP-OCRv5).

    Formato: header com metadados, texto por página separado por ---.
    """
    output_dir.mkdir(parents=True, exist_ok=True)
    md_path = output_dir / f"{result.pdf_path.stem}.md"

    lines: list[str] = []
    lines.append(f"# {result.pdf_path.name}")
    lines.append("")
    lines.append(f"- **Data de extração**: {datetime.now().strftime('%Y-%m-%d %H:%M')}")
    lines.append(f"- **Páginas**: {result.num_pages}")
    lines.append(f"- **Textos extraídos**: {result.total_texts}")
    lines.append("")

    for page in result.pages:
        lines.append(f"## Página {page.page_num}")
        lines.append("")
        if page.texts:
            lines.append("\n".join(page.texts))
        else:
            lines.append("*(sem texto detectado)*")
        lines.append("")
        lines.append("---")
        lines.append("")

    md_path.write_text("\n".join(lines), encoding="utf-8")
    return md_path


def write_structure_markdown(result: PdfResult, output_dir: Path) -> Path:
    """Gera markdown no modo structure (PPStructureV3).

    Usa o markdown gerado nativamente pelo pipeline.
    """
    output_dir.mkdir(parents=True, exist_ok=True)
    md_path = output_dir / f"{result.pdf_path.stem}.md"

    lines: list[str] = []
    lines.append(f"# {result.pdf_path.name}")
    lines.append("")
    lines.append(f"- **Data de extração**: {datetime.now().strftime('%Y-%m-%d %H:%M')}")
    lines.append(f"- **Páginas**: {result.num_pages}")
    lines.append(f"- **Modo**: PP-StructureV3")
    lines.append("")

    md_content = getattr(result, "_structure_markdown", "")
    if md_content:
        lines.append(md_content)
    else:
        lines.append("*(sem conteúdo estrutural extraído)*")

    md_path.write_text("\n".join(lines), encoding="utf-8")
    return md_path


def write_markdown(result: PdfResult, output_dir: Path, mode: str = "text") -> Path:
    """Gera markdown de acordo com o modo."""
    if mode == "structure":
        return write_structure_markdown(result, output_dir)
    return write_text_markdown(result, output_dir)
