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

namespace Kufer\Web\KuferTools\Basis\Anmeldung\KursAuswahl;

use Kufer\Web\KuferTools\Utils\KursFilter\HandleShowKursFilter;


abstract class KursAuswahlUseCase extends \Kufer\Web\KuferTools\Basis\UseCase\ToolUseCase
{
  public function __construct($request)
  {
    parent::__construct($request, new KursAuswahlResponse());
  }

  public function action()
  {
    $this->handleResponseStrategies();

    $knr = $this->getFilterKursnummer();
    $columns = $this->getColumns($this->toolSettings);

    return $this->getResponse($knr, $columns);
  }

  
  protected function getFilterKursnummer(): string
  {
    if ($this->toolSettings->kursFilterVorbelegen === 'W') {
      return $this->toolSettings->knrVon;
    }

    return '';
  }

  protected function getResponseStrategies()
  {
    return array_merge(
      parent::getResponseStrategies(),
      array(
        new \Kufer\Web\KuferTools\Utils\ResponseStrategies\ResponseWithToolSettings($this)
      )
    );
  }

  protected function getResponse($knr, $columns)
  {
    $kursFilterObj = $this->getKursFilterObj();
    $kursFilter = HandleShowKursFilter::getKursFilterVonBis($this->toolSettings, $kursFilterObj->getToolStrFuerFilter());
    
    $this->response->kursFilterVon = $kursFilter['von'];
    $this->response->kursFilterBis = $kursFilter['bis'];

    $this->setHinterlegungenToResponse();

    $this->response->knr = $knr;
    $this->response->columns = $columns;
    $this->response->showAdvancedFilter = $this->toolSettings->showAdvancedKursFilter;

    return $this->response;
  }

  protected function getKursFilterObj()
  {
    return new \Kufer\Web\KuferTools\Utils\KursFilter\KursFilter($this->getToolId(), $this->toolSettings);
  }

  abstract protected function getKursHelper(): \Kufer\Web\KuferTools\Utils\DatamodulHelper\Kurse\KursHelper;

  protected function getKursIds()
  {
    return $this->getKursHelper()->getIdsOhneFilter();
  }

  protected function setHinterlegungenToResponse()
  {
    $this->response = HandleShowKursFilter::setHinterlegungenToResponse(
      $this->response,
      $this->getKursIds(),
      \explode(',', $this->toolSettings->semlist),
      isset($this->toolSettings->showAllHinterlegungenFilter) && $this->toolSettings->showAllHinterlegungenFilter
    );
  }

  protected function getExtraColumns()
  {
    $columns = $this->getColumns($this->toolSettings);

    $extraColumn = new \Column();
    $extraColumn->fieldname = 'id';
    $extraColumn->datamodul = 'kurse';
    $extraColumn->title = '';
    $extraColumn->width = '30';
    array_unshift($columns, $extraColumn);

    return $columns;
  }
}

class KursAuswahlRequest
{
}

class KursAuswahlResponse extends \Kufer\Web\KuferTools\Basis\UseCase\ToolResponse
{
  public $toolSection;
  public $toolSettings;
  
  public $knr;

  
  public $columns;

  public $kategorien = array();
  public $sonderKategorien = array();
  public $aussenstellen = array();
  public $kursOrte = array();
  public $fachBereiche = array();
  public $bezirke = array();
  public $gemeinden = array();
  public $zielgruppen = array();
  public $semester = array();
  public $benutzer = array();

  public $kursFilterVon;
  public $kursFilterBis;

  public $showAdvancedFilter;
  public $kursauswahl1hinterlegung;
  public $kursauswahl2hinterlegung;
  public $kursauswahl3hinterlegung;
  public $kursauswahl4hinterlegung;
  public $kursauswahl5hinterlegung;
  public $kursauswahl6hinterlegung;
  public $kursauswahl7hinterlegung;
  public $kursauswahl8hinterlegung;
  public $kursauswahl9hinterlegung;
  public $kursauswahl10hinterlegung;
  public $kursauswahl11hinterlegung;
  public $kursauswahl12hinterlegung;
  public $kursauswahl13hinterlegung;
  public $kursauswahl14hinterlegung;
  public $kursauswahl15hinterlegung;
  public $kursauswahl16hinterlegung;
}