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

namespace Kufer\Web\KuferTools\Dozent\KursUebersicht\Detailsreiter\Termine\BerichtAbgeben\Dozenten;

class HandleDozDataTableUseCase extends \Kufer\Web\KuferTools\Basis\UseCase\EinzelKurstagUseCase
{
  private $dozhelper;

  public function __construct($request)
  {
    parent::__construct($request, new HandleDozDataTableResponse());
    $this->toolSettings->sorttn = 'name';
    $this->dozhelper = \Kufer\Web\KuferTools\Utils\DatamodulHelper\Dozenten\DozentenHelper::createDozentenDozentenBerichtTermine($this->toolSettings, $this->getUser(), $this->getKurstag()->knr);
    $veranstalter = \SessionOperations::getCurrentWebToolsDozent();

    $searchAPI = new \Kufer\Web\KuferTools\Utils\FilterSearch\DozentenSearchFilter();
    $searchAPI->setSearchMapToSession(
      array_merge($searchAPI->getSearchMapFromRequest(), array('einsatzbezirk' => $veranstalter->bezirk)),
      'tool' . $this->getToolId()
    );
  }

  public static function getToolSectionId()
  {
    return 812;
  }

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

  public function action()
  {
    if ($this->request->getTn) {
      $json = $this->handleGetTn($this->request->tnr);
    } else {
      $json = $this->getJSON4TnDataTable();
    }

    return $this->getResponse($json);
  }

  
  private function handleGetTn($pTnr)
  {
    $dbwTeilnehmer = new \DBWorkTeilnehmer();
    $teilnehmer = $dbwTeilnehmer->getTeilnehm($pTnr);
    $result = (object)array(
      'tnr' => $pTnr,
      'name' => $teilnehmer->name,
      'vorname' => $teilnehmer->vorname,
      'email' => $teilnehmer->email_anzeige
    );

    return \JsonOperations::encode4Ajax($result);
  }

  private function getExtraColumn()
  {
    $columns = $this->getColumns($this->toolSettings);
    $extraColumn = new \Column();
    $extraColumn->fieldname = 'id';
    $extraColumn->datamodul = 'teilnehmer';
    $extraColumn->title = '';
    $extraColumn->width = '20';
    array_unshift($columns, $extraColumn);

    return $columns;
  }

  
  private function getJSON4TnDataTable()
  {
    
    $teilnehmerProSeite = (isset($this->toolSettings->teilnehmerproseite) && $this->toolSettings->teilnehmerproseite > 0) ? $this->toolSettings->teilnehmerproseite : 20;
    $iDisplayStart = \RequestOperations::getVarValue('iDisplayStart', 0);
    $currentPage = $iDisplayStart / $teilnehmerProSeite + 1;

    
    $alleTeilnehmerNummern = $this->dozhelper->getIdsMitFilter($this->getToolId());
    
    $this->setTotalData($alleTeilnehmerNummern);
    $tnAnzahl = count($alleTeilnehmerNummern);

    $_REQUEST['currentIndex'] = $currentPage;
    $tnNummernDerSeite = \ToolsAPI::getDataForCurrentPage($alleTeilnehmerNummern, $teilnehmerProSeite);

    
    $data = $this->dozhelper->getDatamoduleByIds($tnNummernDerSeite);

    $columns = $this->getExtraColumn();
    
    $aaData = $this->datamodulToDataTable($data, $columns);

    
    $tnAnzahlSeite = count($data);
    for ($i = 0; $i < $tnAnzahlSeite; $i++) {
      
      $tmpDoz = new class() {
        public $id;
        public $guid;
        public $name;
        public $vorname;
      };
      $tmpDoz->id = $data[$i]->id;
      $tmpDoz->guid = !is_null($data[$i]->guid) ? (string)$data[$i]->guid : null;
      $tmpDoz->name = $data[$i]->name;
      $tmpDoz->vorname = $data[$i]->vorname;

      $base64Doz = \JsonOperations::encodeBase64($tmpDoz);

      
      $aaData[$i][0] = '<button type="button" class="btn btn-success choose_doz_termine_bericht" title="Buchen" data-doz="' . $base64Doz . '" >'
       . '<i class="fa fa-download" aria-hidden="true"></i>'
              . '</button>';
    }

    
    $output = array(
      'sEcho' => intval(\RequestOperations::getVarValue('sEcho')),
      'iTotalRecords' => $tnAnzahl,
      'iTotalDisplayRecords' => $tnAnzahl,
      'aaData' => $aaData
    );

    return \JsonOperations::encode($output);
  }

  
  private function datamodulToDataTable($pDatamodulAry, $pColumns)
  {
    $wssFactory = new \Kufer\Web\KuferTools\Utils\WssField\WssFactory();

    $data4Datatable = array();
    foreach ($pDatamodulAry as $datamodul) {
      $row = array();
      foreach ($pColumns as $column) {
        $wss = $wssFactory->getWss($this->toToolSection(), $this->toolSettings, $column);
        $row[] = $wss->getHtmlEncodedValue($datamodul, false);
      }
      $data4Datatable[] = $row;
    }

    return $data4Datatable;
  }

  
  protected function setTotalData($pData)
  {
    \ToolsAPI::setTotalData($pData, $this->getToolId());
  }

  protected function getResponse($json)
  {
    $this->response->json = $json;

    return $this->response;
  }
}