from __future__ import annotations

from dataclasses import dataclass, field

from app.models.embedding_record import EmbeddingRecord
from app.models.enums import EmbedStatus


@dataclass(frozen=True)
class EmbeddingRecordUpsert:
    """Embedding record plus upstream lineage for Mongo upsert."""

    record: EmbeddingRecord
    upstream_chunk_id: str | None = None
    upstream_analysis_id: str | None = None
    embed_status: EmbedStatus = EmbedStatus.PENDING


@dataclass
class EmbeddingRecordBuildResult:
    """Output of a batch embedding-record build."""

    items: list[EmbeddingRecordUpsert] = field(default_factory=list)
    doc_source_count: int = 0
    code_source_count: int = 0
    commit_source_count: int = 0
    skipped_empty: int = 0
    skipped_unchanged: int = 0
    skipped_invalid: int = 0

    @property
    def built_count(self) -> int:
        return len(self.items)

    @property
    def total_source_count(self) -> int:
        return self.doc_source_count + self.code_source_count + self.commit_source_count
