from __future__ import annotations

from pathlib import Path

from src.util.text import read_text_files


class KnowledgeService:
    """Loads local reference materials (creator profiles + ERP docs)."""

    def __init__(self, profiles_dir: Path, erp_dir: Path):
        self.profiles_dir = profiles_dir
        self.erp_dir = erp_dir

    def profiles_text(self) -> str:
        text = read_text_files(self.profiles_dir, limit_chars=20_000)
        return text or "(Nessun profilo di esempio fornito.)"

    def erp_text(self) -> str:
        text = read_text_files(self.erp_dir, limit_chars=35_000)
        # Also try PDF extracts if present
        pdf_extra = self._extract_pdfs(self.erp_dir, limit_chars=15_000)
        if pdf_extra:
            text = (text + "\n\n" + pdf_extra).strip()
        return text or "(Nessuna documentazione ERP fornita.)"

    def _extract_pdfs(self, folder: Path, limit_chars: int) -> str:
        if not folder.exists():
            return ""
        try:
            from PyPDF2 import PdfReader
        except ImportError:
            return ""

        chunks: list[str] = []
        total = 0
        for path in sorted(folder.rglob("*.pdf")):
            try:
                reader = PdfReader(str(path))
                pages = []
                for page in reader.pages[:30]:
                    pages.append(page.extract_text() or "")
                body = "\n".join(pages).strip()
            except Exception:
                continue
            if not body:
                continue
            piece = f"### PDF: {path.name}\n{body}\n"
            if total + len(piece) > limit_chars:
                chunks.append(piece[: max(0, limit_chars - total)] + "\n...[truncated]")
                break
            chunks.append(piece)
            total += len(piece)
        return "\n".join(chunks)
