/**
  * 
  * @param Tables\Reservation $reservation
  * @return mixed[]
  */
 private function validateReservation($reservation, $game_type_id)
 {
     $dateTimeRaw = ['date' => strtotime($reservation->reservation_date), 'time_from' => strtotime($reservation->time_from), 'time_to' => strtotime($reservation->time_to)];
     $dateTime = ['date' => DatetimeManager::format($dateTimeRaw['date'], DatetimeManager::DB_DATE_ONLY), 'time_from' => DatetimeManager::format($dateTimeRaw['time_from'], DatetimeManager::DB_TIME_ONLY), 'time_to' => DatetimeManager::format($dateTimeRaw['time_to'], DatetimeManager::DB_TIME_ONLY)];
     if ($dateTimeRaw['time_from'] > $dateTimeRaw['time_to']) {
         return ['result' => false, 'message' => "Čas konce rezervace musí následovat čas začátku rezervace."];
     }
     $hour = date("H", $dateTimeRaw['time_from']);
     if ($hour * 1 < Tables\Reservation::EARLY_RESERVATION) {
         return ['result' => false, 'message' => "Nelze vytvářet rezervace před začátkem rezervací({$hour})"];
     }
     $hour = date("H", $dateTimeRaw['time_to']);
     if ($hour * 1 > Tables\Reservation::LATE_RESERVATION) {
         return ['result' => false, 'message' => "Nelze vytvářet rezervace po konci rezervací({$hour})"];
     }
     $eventExists = Tables\Event::existsDuring($this->pdo, $dateTime['date'], $dateTime['time_from'], $dateTime['time_to']);
     if ($eventExists) {
         return ['result' => false, 'message' => sprtintf('Ve vámi zvolený čas je již naplánovaná událost a nelze tedy uložit rezervaci.')];
     }
     if ($reservation->desk_id != Tables\Desk::NO_DESK) {
         if (!Views\ReservationExtended::checkDeskAvailable($this->pdo, $reservation->desk_id, $dateTime['date'], $dateTime['time_from'], $dateTime['time_to'])) {
             return ['result' => false, 'message' => \sprintf("Stůl č %02d je ve vámi zvolený čas obsazený", $reservation->desk_id)];
         }
     }
     $boxes = Views\ReservationExtended::getAvailableGameBox($this->pdo, $game_type_id, $dateTime['date'], $dateTime['time_from'], $dateTime['time_from']);
     if ($boxes === false) {
         return ['result' => false, 'message' => "Při kontrole použitých krabic nastala chyba."];
     }
     if (empty($boxes)) {
         return ['result' => false, 'message' => "Ve vámi zvolený čas není dostupná žádná herní krabice požadované hry."];
     }
     return ['result' => true, 'box' => array_shift(array_slice($boxes, 0, 1))];
 }