from __future__ import annotations

from sqlalchemy import CheckConstraint, ForeignKey, Index, Integer, Numeric, String
from sqlalchemy.orm import Mapped, mapped_column, relationship

from src.db.base import Base


class LimitTemplate(Base):
    __tablename__ = "limit_template"
    __table_args__ = (
        CheckConstraint(
            "row_type IN ('SECTION','GROUP','LEAF')",
            name="ck_v3_limit_template_row_type",
        ),
        Index("ix_v3_limit_template_parent", "parent_id"),
        {"schema": "v3"},
    )

    id: Mapped[int] = mapped_column(primary_key=True)
    parent_id: Mapped[int | None] = mapped_column(Integer, ForeignKey("v3.limit_template.id"))
    sort_order: Mapped[int] = mapped_column(Integer)
    row_type: Mapped[str] = mapped_column(String)
    section_no: Mapped[str | None] = mapped_column(String)
    expense_item_code: Mapped[str | None] = mapped_column(String)
    name: Mapped[str] = mapped_column(String)
    unit: Mapped[str | None] = mapped_column(String)
    limit_with_vat: Mapped[float | None] = mapped_column(Numeric)
    limit_without_vat: Mapped[float | None] = mapped_column(Numeric)

#     parent = relationship("LimitTemplate", remote_side="LimitTemplate.id")
#     children: Mapped[list[LimitTemplate]] = relationship("LimitTemplate")
#     form_limits: Mapped[list[FormLimit]] = relationship("FormLimit")
