<?php
/**
 * @copyright (c) Kufer Software GmbH, Loisachstrasse 4, D-84453 Mühldorf
 */

namespace Kufer\KuferTools\Allgemein\Raumreservierung\Reservierungsformular\SendeReservierung;

use Kufer\KuferTools\Allgemein\Raumreservierung\Reservierungsformular\ReservierungsFormularController;

class SendeReservierungController extends \Kufer\KuferTools\Basis\Controller\ToolController
{
  protected function getUseCase(): \Kufer\KuferTools\Basis\UseCase\UseCase
  {
    return new SendeReservierungUseCase(
      $this->getRequestObj()
    );
  }

  protected function getRequestObj()
  {
    $request = new SendeReservierungRequest();
    $request->raum = \GetOperations::getInt('raum');
    $request->datum = \GetOperations::getVarValue('datum');
    $request->sperrzeit = $this->getSperrzeitFromPost();
    $request->startTime = \GetOperations::getVarValue('uhrVon');
    $request->endTime = \GetOperations::getVarValue('uhrBis');

    return $this->handleXsrf($request, 'raumreservierung', $request->raum);
  }

  private function getSperrzeitFromPost()
  {
    
    
    $sperrzeit = new \Ortverf();
    $sperrzeit->ortnr = \GetOperations::getInt('raum');
    $sperrzeit->vondat = $sperrzeit->bisdat = \GetOperations::getVarValue('datum');
    $sperrzeit->vonuhr = \PostOperations::getVarValue('vonuhr');
    $sperrzeit->bisuhr = \PostOperations::getVarValue('bisuhr');
    $sperrzeit->begruendung = \PostOperations::getVarValue('begruendung');

    return $sperrzeit;
  }

  protected function getControllerToForward($pUseCaseResponse)
  {
    if ($pUseCaseResponse->status !== SendeReservierungUseCase::RESERVIERUNG_ERFOLGREICH
        && $pUseCaseResponse->status !== SendeReservierungUseCase::RESERVIERUNG_DOPPELT_ABGESENDET
        && $pUseCaseResponse->status !== SendeReservierungUseCase::RESERVIERUNG_ERFOLGREICH_EMAIL_FEHLER) {
      return new ReservierungsFormularController($pUseCaseResponse->sperrzeit, $pUseCaseResponse->status);
    }

    return null; 
  }

  protected function getPresenter($pUseCaseResponse)
  {
    return new SendeReservierungPresenter($pUseCaseResponse);
  }
}