<?php
/**
 * @copyright (c) Kufer Software GmbH, Oderstraße 7, D-84453 Mühldorf
 */

namespace Kufer\Web\KuferTools\Dozent\Kursplanung\KursBearbeitenPlanung;

use Kufer\Web\KuferTools\Dozent\Kursplanung\KursBearbeiten;
use Kufer\Web\KuferTools\Utils\Dozent\KursBearbeitenPlanungUtils;

class KursBearbeitenPlanungAbsendenController extends KursBearbeiten\KursBearbeitenAbsendenController
{
  protected function getUseCase(): \Kufer\Web\KuferTools\Basis\UseCase\UseCase
  {
    $request = $this->getRequestObj();
    $result = new KursBearbeitenPlanungAbsendenUseCase($request);
    if (!$result->isKursAbgeben()) {
      return new KursBearbeitenPlanungAbsendenNichtKursAbgebenUseCase($request);
    }

    return $result;
  }

  protected function getNewRequestObj()
  {
    return new KursBearbeitenPlanungAbsendenRequest();
  }

  protected function getRequestObj()
  {
    $result = parent::getRequestObj();
    $result->kursAbgeben = \PostOperations::isDefined('kursbearbeitenplanung_abgeben');

    return $result;
  }

  protected function getControllerToForward($pUseCaseResponse)
  {
    if ($pUseCaseResponse->kursAbgeben
      && $pUseCaseResponse->statusCode === KursBearbeitenPlanungAbsendenUseCase::SUCCESS_KURSDATEN_BEARBEITEN_ERFOLGREICH) {
      if (KursBearbeitenPlanungUtils::isKursBearbeitbar(
        $pUseCaseResponse->toolSettings->kursstatusKursIstBearbeitbar,
        $pUseCaseResponse->toolSettings->kursstatusKursIstNichtBearbeitbar,
        $pUseCaseResponse->toolSettings->kursstatusKursInPlanung,
        $pUseCaseResponse->kurs
      )) {
        
        return new KursBearbeiten\KursBearbeitenNachAbsendenController(
          $pUseCaseResponse->kurs->id,
          $pUseCaseResponse->statusCode,
          $pUseCaseResponse->wrongFields,
          $pUseCaseResponse->kurs
        );
      } else {
        

        return new \Kufer\Web\KuferTools\Dozent\Kursplanung\KursUebersicht\KursUebersichtController();
      }
    }

    return new KursBearbeitenPlanungNachAbsendenController(
      $pUseCaseResponse->kurs->id,
      $pUseCaseResponse->statusCode,
      $pUseCaseResponse->wrongFields,
      $pUseCaseResponse->changedKurs,
      $pUseCaseResponse->kursAbgeben,
      $pUseCaseResponse->toolSettings
    );
  }
}