from sqlalchemy import ForeignKey, Integer, String
from sqlalchemy.orm import Mapped, mapped_column, relationship

from app.db.base import Base, SoftDeleteMixin, TimestampMixin


class Vehicle(Base, TimestampMixin, SoftDeleteMixin):
    __tablename__ = "vehicles"

    id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
    customer_id: Mapped[int] = mapped_column(ForeignKey("customers.id"), nullable=False, index=True)
    registration_number: Mapped[str | None] = mapped_column(String(20), index=True)
    engine_number: Mapped[str | None] = mapped_column(String(50), index=True)
    chassis_number: Mapped[str | None] = mapped_column(String(50), index=True)
    make: Mapped[str | None] = mapped_column(String(100))
    model: Mapped[str | None] = mapped_column(String(100))
    fuel_type: Mapped[str | None] = mapped_column(String(50))
    vehicle_type: Mapped[str | None] = mapped_column(String(50), index=True)
    body_type: Mapped[str | None] = mapped_column(String(50), index=True)
    manufacturing_year: Mapped[int | None] = mapped_column(Integer)

    customer: Mapped["Customer"] = relationship(back_populates="vehicles")
    policies: Mapped[list["Policy"]] = relationship(back_populates="vehicle")


from app.models.customer import Customer  # noqa: E402
from app.models.policy import Policy  # noqa: E402
