@startuml
skinparam classAttributeIconSize 0

database Database {
}

package "UI" #DDDDDD {
class RegisterDroneUI{
}
}

package "Controller" #DDDDDD {
class RegisterDroneController{
+getPharmacies()
+newDrone(batteryPerc, chargingStatus, potency, weight, batteryCapacity, maxPayload, pharmacyId)
+registerDrone(drone)
}
}


package "Model" #DDDDDD {
 package "Service" #DDDDDD {
  class PharmacyService{
      +PharmacyService()
      +getPharmacies()
  }

  class DroneService{
      +DroneService()
      +registerDrone(drone)
   }
}

package "Model" #DDDDDD {
class Drone{
  -int id
  -float batteryPerc
  -String charginStatus
  -float potency
  -float weight
  -int batteryCapacity
  -float maxPayload
  -float batteryVoltage
  +Drone(batteryPerc, charginStatus, potency,\n weight, batteryCapacity, maxPayload, batteryVoltage, pharmacyId)
}

class Address{
  -float longitude
  -float latitude
  -String doorNumber
  -String streetName
  -String postalCode
  -String locality
  -String country
}

class Pharmacy {
  -int id
  -String name
}
}


package "Data" #DDDDDD {
class DataHandler{
    +openConnection()
    +closeAll()
}
class PharmacyDB{
     +PharmacyDB()
     +getPharmacies()
 }

 class DroneDB{
     +DroneDB()
     +registerDrone(drone)
  }
}

class PharmacyDB extends DataHandler
class DroneDB extends DataHandler

RegisterDroneUI ..> RegisterDroneController
RegisterDroneController ..> PharmacyService
RegisterDroneController ..> DroneService
Database "1" --> "1" PharmacyDB : manages
Database "1" --> "1" DroneDB : manages
DroneService "1" --> "*" PharmacyDB : uses
DroneService "1" --> "*" DroneDB : uses
PharmacyService "1" --> "*" Pharmacy : manage services of
DroneService "1" --> "*" Drone : manage services of

Database "1" -- "*" Pharmacy : has registered >
Database "1" -- "*" Drone : has registered >

Drone "*" -- "1" Pharmacy : belongs to >
Pharmacy "1" -- "1" Address : has >

@enduml