@startuml
skinparam shadowing false
skinparam line type polyline

'left to right direction

    class AssignVehiclesUI {
        - controller : RegisterVehicleController
        + RegisterVehicleUI()
        + registerVehicle() : void
    }

    class AssignVehiclesController {
        - repositories: Repositories
        - vehicleRepository : VehicleRepository

        + RegisterVehicleController()
        + registerVehicle(VIN: String, brand: String, model: String, type: String, vehiclePlate: String, \ntareWeight: double, grossWeight: double, currentKm: int, registrationDate: Date, acquisitionDate: Date, maintenanceFrequency: int) : Boolean
    }

    class Repositories {
        - instance : Repositories
        - vehicleRepository : VehicleRepository
        - Repositories()
        + getInstance() : Repositories
        + getVehicleRepository() : VehicleRepository
    }

    class VehicleRepository {
        - vehicleList : List<Vehicle>

        + VehicleRepository()
        + getVehicleList () : List<Vehicles>
        + registerVehicle(VIN: String, brand: String, model: String, type: String, vehiclePlate: String, \ntareWeight: double, grossWeight: double, currentKm: int, registrationDate: Date, acquisitionDate: Date, maintenanceFrequency: int) : Boolean
        + addVehicle(vehicle: Vehicle) : void
        + verifyExistingVehicle(VIN: String, VehiclePlate: String) : Boolean
    }

    class Vehicle {
        - VIN : String
        - brand : String
        - model : String
        - type : String
        - vehiclePlate : String
        - tareWeight : double
        - grossWeight : double
        - currentKm : int
        - registrationDate: Date
        - acquisitionDate : Date
        - maintenanceFrequency : int

        + Vehicle(VIN: String, brand: String, model: String, type: String, vehiclePlate: String, \ntareWeight: double, grossWeight: double, currentKm: int, registrationDate: Date, acquisitionDate: Date, maintenanceFrequency: int)
        + validateVehicle(vehicle: Vehicle) : Boolean
    }

AssignVehiclesUI ..> AssignVehiclesController
AssignVehiclesController ..> Repositories: repositories
Repositories --> Repositories: instance
AssignVehiclesController ..> VehicleRepository: vehicleRepository
Repositories --> "1"VehicleRepository: vehicleRepository
VehicleRepository -->"*" Vehicle: vehicle

@enduml
