from __future__ import annotations

from app.modules.rag.contracts import RagDocument, RagLayer, RagSource, RagSpan
from app.modules.rag.indexing.code.code_text.chunker import CodeChunk
from app.modules.rag.retrieval.test_filter import is_test_path


class CodeTextDocumentBuilder:
    def build(self, source: RagSource, chunk: CodeChunk, *, chunk_index: int) -> RagDocument:
        return RagDocument(
            layer=RagLayer.CODE_SOURCE_CHUNKS,
            lang="python",
            source=source,
            title=chunk.title,
            text=chunk.text,
            span=RagSpan(chunk.start_line, chunk.end_line),
            metadata={
                "chunk_index": chunk_index,
                "chunk_type": chunk.chunk_type,
                "module_or_unit": source.path.replace("/", ".").removesuffix(".py"),
                "is_test": is_test_path(source.path),
            },
        )
