from sqlalchemy.orm import Session

from app.models.vehicle import Vehicle


class VehicleRepository:
    def __init__(self, db: Session):
        self.db = db

    def create(self, customer_id: int, data: dict) -> Vehicle:
        vehicle = Vehicle(customer_id=customer_id, **data)
        self.db.add(vehicle)
        self.db.flush()
        return vehicle

    def list_by_customer(self, customer_id: int) -> list[Vehicle]:
        return (
            self.db.query(Vehicle)
            .filter(Vehicle.customer_id == customer_id, Vehicle.deleted_at.is_(None))
            .order_by(Vehicle.registration_number.asc())
            .all()
        )

    def get_by_id(self, vehicle_id: int, customer_id: int | None = None) -> Vehicle | None:
        query = self.db.query(Vehicle).filter(Vehicle.id == vehicle_id, Vehicle.deleted_at.is_(None))
        if customer_id is not None:
            query = query.filter(Vehicle.customer_id == customer_id)
        return query.first()
