from __future__ import annotations

from datetime import datetime
from typing import Optional

from pydantic import Field

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


class StoredEmbeddingRecord(EmbeddingRecord):
    """Embedding record persisted in MongoDB with pipeline lifecycle fields."""

    dedupe_key: Optional[str] = None
    embed_status: EmbedStatus = EmbedStatus.PENDING
    qdrant_point_id: Optional[str] = None
    upstream_chunk_id: Optional[str] = None
    upstream_analysis_id: Optional[str] = None
    last_error: Optional[str] = None
    created_at: datetime = Field(default_factory=datetime.utcnow)
    updated_at: datetime = Field(default_factory=datetime.utcnow)
    embedded_at: Optional[datetime] = None


def build_record_dedupe_key(repo_id: str, snapshot_id: str, record_id: str) -> str:
    return f"{repo_id}:{snapshot_id}:{record_id}:embedding"
