from api.v1.common.base_models import TenantScopedMixin, TimestampMixin
from core.database import Base
from sqlalchemy import (
    ForeignKeyConstraint,
    Integer,
    PrimaryKeyConstraint,
    String,
    UniqueConstraint,
)
from sqlalchemy.orm import Mapped, mapped_column


class CountryRuleOct(Base, TenantScopedMixin, TimestampMixin):
    __tablename__ = "country_rule_oct"
    __table_args__ = (
        PrimaryKeyConstraint("id", name="country_rule_oct_pkey"),
        ForeignKeyConstraint(
            ["tenant_id", "company_id", "permission", "line", "fraction"],
            [
                "a76.fraction_rule_octave.tenant_id",
                "a76.fraction_rule_octave.company_id",
                "a76.fraction_rule_octave.permission",
                "a76.fraction_rule_octave.line",
                "a76.fraction_rule_octave.fraction",
            ],
            ondelete="CASCADE",
            name="fk_country_rule_oct_frac_octava",
        ),
        UniqueConstraint(
            "tenant_id",
            "company_id",
            "permission",
            "line",
            "fraction",
            "country_code",
            name="uq_country_rule_oct_permission_line_fraction_country",
        ),
        {"schema": "a76"},
    )

    id: Mapped[int] = mapped_column(Integer, primary_key=True)

    permission: Mapped[str] = mapped_column(String(20))
    line: Mapped[int] = mapped_column()
    fraction: Mapped[str] = mapped_column(String(10))
    country_code: Mapped[str] = mapped_column(String(3))
