from decimal import Decimal

from sqlalchemy import Boolean, ForeignKey, Integer, Numeric, String, Text
from sqlalchemy.orm import Mapped, mapped_column, relationship

from app.db.base import Base, TimestampMixin


class CommissionRule(Base, TimestampMixin):
    __tablename__ = "commission_rules"

    id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
    agency_id: Mapped[int] = mapped_column(ForeignKey("agencies.id"), index=True)
    insurance_company_id: Mapped[int | None] = mapped_column(ForeignKey("insurance_companies.id"))
    vehicle_type: Mapped[str | None] = mapped_column(String(50))
    coverage_type: Mapped[str | None] = mapped_column(String(50))
    rule_type: Mapped[str] = mapped_column(String(20))  # percent | fixed
    value: Mapped[Decimal] = mapped_column(Numeric(12, 4))
    priority: Mapped[int] = mapped_column(Integer, default=100)
    active: Mapped[bool] = mapped_column(Boolean, default=True)
    notes: Mapped[str | None] = mapped_column(Text)

    agency: Mapped["Agency"] = relationship()
    insurance_company: Mapped["InsuranceCompany | None"] = relationship()


from app.models.agency import Agency  # noqa: E402
from app.models.insurance_company import InsuranceCompany  # noqa: E402
