from sqlalchemy import ForeignKey, JSON, String, Text
from sqlalchemy.orm import Mapped, mapped_column, relationship

from app.db.base import Base, TimestampMixin


class ParserCorrection(Base, TimestampMixin):
    __tablename__ = "parser_corrections"

    id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
    extraction_id: Mapped[int] = mapped_column(ForeignKey("extraction_results.id"), index=True)
    agency_id: Mapped[int] = mapped_column(ForeignKey("agencies.id"), index=True)
    corrected_by: Mapped[int] = mapped_column(ForeignKey("users.id"))
    company_code: Mapped[str | None] = mapped_column(String(50))
    parser_key: Mapped[str | None] = mapped_column(String(50))
    original_filename: Mapped[str] = mapped_column(String(255), nullable=False)
    fields: Mapped[list] = mapped_column(JSON, nullable=False)
    notes: Mapped[str | None] = mapped_column(Text)
    source: Mapped[str] = mapped_column(String(30), nullable=False, default="parser_lab", index=True)

    extraction: Mapped["ExtractionResult"] = relationship(back_populates="parser_corrections")
