from sqlalchemy import Boolean, ForeignKey, Integer, String, Text
from sqlalchemy.orm import Mapped, mapped_column, relationship

from app.db.base import Base, TimestampMixin


class ParserPattern(Base, TimestampMixin):
    __tablename__ = "parser_patterns"

    id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
    agency_id: Mapped[int] = mapped_column(ForeignKey("agencies.id"), index=True)
    created_by: Mapped[int] = mapped_column(ForeignKey("users.id"))
    company_code: Mapped[str] = mapped_column(String(50), index=True)
    field_name: Mapped[str] = mapped_column(String(50))
    regex: Mapped[str] = mapped_column(Text)
    page_hint: Mapped[int | None] = mapped_column(Integer)
    priority: Mapped[int] = mapped_column(Integer, default=100)
    active: Mapped[bool] = mapped_column(Boolean, default=True)
    source_training_example_id: Mapped[int | None] = mapped_column(
        ForeignKey("parser_training_examples.id"), nullable=True
    )
    notes: Mapped[str | None] = mapped_column(Text)

    source_training_example: Mapped["ParserTrainingExample | None"] = relationship(
        back_populates="patterns"
    )
