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

namespace Kufer\KuferTools\Firma\Anmeldung\KursUebersicht;


class KursUebersichtUseCase extends \Kufer\KuferTools\Basis\KursUebersicht\KursUebersichtUseCase
{
  public function __construct($request)
  {
    parent::__construct($request, new KursUebersichtResponse());
  }

  public static function getToolSectionId()
  {
    return 322;
  }

  public static function getToolId()
  {
    return \ToolsAPI::TOOL_ANMELDUNGBUCHEN_FA;
  }

  protected function getUeberschrift()
  {
    return 'neue Anmeldung - Seminarübersicht';
  }

  protected function getButtons()
  {
    $beschriftung = new \ButtonBeschriftung_DozKursUebersicht();
    $buttonFactory = new \Kufer\KuferTools\Basis\Button\ButtonFactory();
    $buttons = array();

    if ($this->isRechtAllowed('322.0.3')) {
      $text = $beschriftung->getBeschriftung($beschriftung::BUTTON_FILTER, $this->toolSettings);
      $anzahlEintraege = count($this->response->kurse);
      
      $this->addFilterButton($buttons, $buttonFactory, $anzahlEintraege, $text);
    }
    $buttons[] = array($buttonFactory->getZurueckZurKurssucheButton($this->getToolId()));

    return $buttons;
  }

  protected function checkboxNeeded()
  {
    return false;
  }

  protected function verlinkePanelHeaderAllowed()
  {
    return ($this->isRechtAllowed('322.0.1')
        && \ToolsAPI::rechteOR(array('338.1.1', '338.1.2', '338.1.3', '338.1.4', '338.1.5'), $this->getToolId()));
  }

  protected function getPanelButtonCallBacks()
  {
    $buttons = array();
    if ($this->isRechtAllowed('322.0.2')) {
      $user = $this->getUser();
      $teilnehmer = $this->getTeilnehmer();

      
      $emptyMandatorys = \AnmeldeAPI::getEmptyMandatoryFieldName($this->toolSettings, $teilnehmer);

      $buttonFactory = new \Kufer\KuferTools\Basis\Button\ButtonFactory();
      $buttons[] = function($kurs) use ($buttonFactory, $emptyMandatorys, $user, $teilnehmer) {
        return \Kufer\KuferTools\Utils\Anmeldung\AnmeldeButtonUtils::createFirmaButtonForAnmeldung(
          $buttonFactory,
          $kurs,
          $emptyMandatorys,
          $user,
          $teilnehmer,
          function(
            \Kufer\KuferTools\Basis\Button\ButtonFactory $buttonFactory,
            \Kufer\KuferTools\Basis\Anmeldung\KursAnmeldeButtonViewModel $viewModel,
            $fnCreateView,
            \Kurs $kurs,
            \Benutzer $user,
            \Teilnehmer $teilnehmer
          ) {
            

            $beschriftung = 'Anmelden';
            $color = 'success';

            
            if (\DBWorkBASysSettings::isUnnaForum() && $kurs->getVarValue('teil_frei') <= 0) {
              $beschriftung = 'Warteliste';
              $color = 'primary';
            }

            return $buttonFactory->getAnmeldenButton(
              '',
              $beschriftung,
              'index.php?tool_id=' . \ToolsAPI::TOOL_ANMELDUNGBUCHEN_FA . '&action=anmeldeformular&knr=' . urlencode($kurs->id) . '&referer=' . urlencode($this->getAktuelleURLRelative()) . '&refererLabel=' . urlencode(\StringOperations::htmlentities('Zurück zur Übersicht')),
              $color
            )
                    ->overwriteButtonWithView($fnCreateView($viewModel));
          }
        );
      };
    }

    return $buttons;
  }

  private function getAktuelleURLRelative()
  {
    $url = \URL::loadCurrent();

    return $url->getUrlRelative();
  }

  protected function getResponse()
  {
    parent::getResponse();
    $this->response->kurse = $this->aktualisiereKursePerDmz($this->response->kurse);
    $this->response->datamodule = $this->response->kurse;
    $this->response->teilnehmer = $this->getTeilnehmer();
    $this->response->hasSepaMandat = \StammBvAPI::hasSepaMandat($this->getTeilnehmer());

    return $this->response;
  }

  private function aktualisiereKursePerDmz($pKurse)
  {
    $isDmzBetrieb = \SessionOperations::isDmzBetrieb();
    $isSettingOk = $this->toolSettings->kursePerDmzAktualisieren;
    if ($isDmzBetrieb && $isSettingOk) {
      try {
        $pKurse = \AnmeldeAPI::updateKursArrayData($pKurse);
      } catch (\Exception $e) {
        
      }
    }

    return $pKurse;
  }

  protected function getDbwTeilnehmer()
  {
    static $cache = null;
    if (is_null($cache)) {
      $cache = new \DBWorkTeilnehmer(1, true);
    }

    return $cache;
  }

  protected function getTeilnehmer()
  {
    $tnr = $this->getUser()->tnr;
    $dbwTn = $this->getDbwTeilnehmer();

    return $dbwTn->getTeilnehm($tnr);
  }
}

class KursUebersichtRequest extends \Kufer\KuferTools\Basis\KursUebersicht\KursUebersichtRequest
{
}

class KursUebersichtResponse extends \Kufer\KuferTools\Basis\Uebersicht\UebersichtMitWssResponse
{
  public $kurse = array();
  public $teilnehmer;
  public $hasSepaMandat = false;
}