# /opt/docker/dev/service_finder/backend/app/models/document.py
import uuid
from datetime import datetime
from typing import Optional
from sqlalchemy import String, Integer, Boolean, DateTime, ForeignKey, Text
from sqlalchemy.dialects.postgresql import UUID as PG_UUID
from sqlalchemy.orm import Mapped, mapped_column
from sqlalchemy.sql import func
from app.db.base_class import Base

class Document(Base):
    """ NAS alapú dokumentumtár metaadatai. """
    __tablename__ = "documents"
    __table_args__ = {"schema": "data"}

    id: Mapped[uuid.UUID] = mapped_column(PG_UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
    parent_type: Mapped[str] = mapped_column(String(20)) # 'organization' vagy 'asset'
    parent_id: Mapped[str] = mapped_column(String(50), index=True)
    doc_type: Mapped[Optional[str]] = mapped_column(String(50))
    
    original_name: Mapped[str] = mapped_column(String(255))
    file_hash: Mapped[str] = mapped_column(String(64))
    file_ext: Mapped[str] = mapped_column(String(10), default="webp")
    mime_type: Mapped[str] = mapped_column(String(100), default="image/webp")
    file_size: Mapped[Optional[int]] = mapped_column(Integer)
    
    has_thumbnail: Mapped[bool] = mapped_column(Boolean, default=False)
    thumbnail_path: Mapped[Optional[str]] = mapped_column(String(255))
    
    uploaded_by: Mapped[Optional[int]] = mapped_column(Integer, ForeignKey("identity.users.id"))
    created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())

    # =========================================================================
    # THOUGHT PROCESS & ARCHITECTURE DECISIONS (2026-03-04)
    # =========================================================================
    # Probléma: Az `ocr_robot.py` (Robot 3) módosítani próbálta a dokumentumok
    # állapotát és menteni akarta az AI eredményeket, de a mezők hiányoztak.
    # 
    # Megoldás: Hozzáadtuk a szükséges mezőket a munkafolyamat (Workflow) 
    # támogatásához.
    # 
    # 1. `status`: A robot a 'pending_ocr' státuszra szűr. Indexeljük, 
    # mert a WHERE feltételben szerepel, így az adatbázis sokkal gyorsabb lesz.
    # 
    # 2. `ocr_data`: A kinyert adatokat tárolja. Text típust használunk String
    # helyett, mert az AI válasza (pl. JSON formátumú adat) hosszú lehet.
    # 
    # 3. `error_log`: Ha az AI hibázik, vagy üres választ ad, itt rögzítjük
    # a hiba okát a könnyebb debuggolás érdekében.
    # =========================================================================
    
    status: Mapped[str] = mapped_column(String(50), default="uploaded", index=True)
    ocr_data: Mapped[Optional[str]] = mapped_column(Text)
    error_log: Mapped[Optional[str]] = mapped_column(Text)