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

namespace Kufer\Web\KuferTools\Dozent\KursUebersicht\Detailsreiter\Honorar\RavensbergHalle\HonorarPdf;

use Kufer\Web\Classes\Export\ExportKurseWithSpecifiedDozent;
use Kufer\Web\Classes\ExportAdapter\ExpAdditionalVariables;
use Kufer\Web\Classes\Stream\ArrayStream;


class HonorarAbrechnungPdfView extends \Kufer\Web\KuferTools\Basis\View\ViewSight
{
  public function getTemplatePathRelative()
  {
    return 'dozent/kursuebersicht/detailsreiter/honorarabrechnung_pdf_ravensberg_halle.sgt';
  }

  protected function getDefaultDataModulArray()
  {
    return array($this->viewModel->kurs);
  }

  protected function getDefaultExportAdapter()
  {
    return new ExpAdditionalVariables(
      new ExportKurseWithSpecifiedDozent($this->viewModel->dozent),
      array(
        'fahrkostenkm' => \MathOperations::floatToStringTruncateNull($this->viewModel->fahrkostenkm),
        'fahrkostenprokm' => \MathOperations::floatToString($this->viewModel->fahrkostenprokm),
        'fahrkostentage' => $this->viewModel->fahrkostentage,
        'fahrkostengesamt' => \MathOperations::floatToString($this->viewModel->fahrkostengesamt),
        'lohnproue' => \MathOperations::floatToStringTruncateNull($this->viewModel->lohnproue),
        'lohngesamt' => \MathOperations::floatToString($this->viewModel->lohngesamt),
        'verguetunggesamt' => \MathOperations::floatToString($this->viewModel->verguetunggesamt),
        'gesamtbetrag' => \MathOperations::floatToString($this->viewModel->gesamtbetrag),
        'kurstageanzahl' => count($this->viewModel->kurstage),
        'verguetungenanzahl' => count($this->viewModel->verguetungen),
        'gesamtue' => \MathOperations::floatToStringTruncateNull($this->viewModel->gesamtue),
        'rechnungsnummer' => $this->viewModel->rechnungsnummer,
        'erster_kurstage_datum' => (new ArrayStream($this->viewModel->kurstage))->sort(static function($a, $b) {
          return \DateTimeOperations::compareDate($a->datum, $b->datum);
        })->first()->datum,
        'letzter_kurstag_datum' => (new ArrayStream($this->viewModel->kurstage))->sort(static function($a, $b) {
          return -\DateTimeOperations::compareDate($a->datum, $b->datum);
        })->first()->datum
      )
    );
  }

  protected function getBodyDataModulArray()
  {
    return array_map(static function(VerguetungForm $verguetungForm) {
      $result = new class() extends \Datamodul {
        public $text;
        public $betrag;
      };

      $result->text = $verguetungForm->text;
      $result->betrag = \MathOperations::floatToString(\MathOperations::stringToFloat($verguetungForm->verguetung));

      return $result;
    }, $this->viewModel->verguetungen);
  }

  protected function getBodyExportAdapter()
  {
    return new \ExpBasis(true);
  }

  protected function getNoDataDataModulArray()
  {
    return array_map(function(\Kurstag $kurstag) {
      $result = new class() extends \Datamodul {
        public $datum;
        public $unterrichtsinhalt;
      };

      $result->datum = $kurstag->datum;
      $result->unterrichtsinhalt = $this->viewModel->lehrinhalte[$kurstag->id];

      return $result;
    }, $this->viewModel->kurstage);
  }

  protected function getNoDataExportAdapter()
  {
    return new \ExpBasis(true);
  }

  public function show()
  {
    $result = $this->getHeader();
    $result .= $this->getBody();
    $result .= $this->getFooter();
    $result .= $this->getNoData();
    $result .= $this->getNoColumn();

    return $result;
  }
}