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


class Teilnehmerliste extends TNListe
{
  public function getListID()
  {
    return 3;
  }

  public function getListTyp()
  {
    return '2';
  }

  protected function getOutputName(): string
  {
    return 'TeilnehmerInnenliste.pdf';
  }

  public function getTNDarstellungText($optionName)
  {
    switch ($optionName) {
      case 'option1':
        return 'Name, Vorname';
      case 'option2':
        return 'Zusatz';
      case 'option3':
        return 'Adresse';
      case 'option4':
        return 'PLZ, Ort';
      case 'option5':
        return 'Telefon';
      case 'option6':
        return 'E-Mail';
      case 'option7':
        return 'Fax';
      case 'option8':
        return 'zusätzliche Leerzeile';
    }

    return parent::getTNDarstellungText($optionName);
  }

  public function getTNDarstellungEnabled($optionName)
  {
    switch ($optionName) {
      case 'option1': 
      case 'option2': 
      case 'option4': 
      case 'option6': 
      case 'option7': 
        return false;
    }

    return parent::getTNDarstellungEnabled($optionName);
  }

  public function getSpaltenanordnungText($optionName)
  {
    switch ($optionName) {
      case 'option1':
        return 'mit Bemerkung';
      case 'option2':
        return 'breite Bemerkung';
      case 'option3':
        return 'mit Geburtstagen';
      case 'option4':
        return 'mit Personalnr.';
      case 'option5':
        return 'mit Gitternetz';
    }

    return parent::getSpaltenanordnungText($optionName);
  }

  public function getSpaltenanordnungEnabled($optionName)
  {
    switch ($optionName) {
      case 'option2': 
      case 'option6':
        return false;
    }

    return parent::getSpaltenanordnungEnabled($optionName);
  }

  public function loadFactoryDefaults()
  {
    parent::loadFactoryDefaults();

    if (!isset($this->settings->tnDarstellung)) {
      $this->settings->tnDarstellung = new \webtools\lists\TNDarstellung();
    }
    $this->settings->tnDarstellung->option3 = true; 
    $this->settings->tnDarstellung->option5 = true; 

    if (!isset($this->settings->kopfbereich)) {
      $this->settings->kopfbereich = new \webtools\lists\Kopfbereich();
    }
    $this->settings->kopfbereich->mitKursgebuehren = true;
    $this->settings->kopfbereich->mitDozentenTelNr = true;
    $this->settings->kopfbereich->mitDauerdetails = true;

    $this->settings->caption = 'Teilnehmerliste';
  }

  public function header()
  {
    parent::header();
    $this->_createTNHeader();
  }

  public function _createContent($pKurs = '')
  {
    $this->_printTNListe();
  }

  public function _getNameWidth()
  {
    $width = 80;
    if ($this->settings->tnDarstellung->option3) { 
      $width -= 17 + 14;
    }
    if ($this->settings->tnDarstellung->option5) { 
      $width -= 13;
    }
    if ($this->settings->spaltenanordnung->option4) { 
      $width -= 5;
    }
    if ($this->settings->spaltenanordnung->option3) { 
      $width -= 8;
    }
    if ($this->settings->spaltenanordnung->option1) { 
      $width -= 13;
    }

    return "$width%";
  }

  public function _createTNHeader()
  {
    $this->pdf->CellAtX('3%', 'Nr', 'B', '', 0, '3%', 'B', 5); 
    $this->pdf->CellExt($this->_getNameWidth(), 'Name', 'B', 5, 'B'); 
    if ($this->settings->tnDarstellung->option3) { 
      $this->pdf->CellExt('17%', 'Straße', 'B', 5, 'B'); 
      $this->pdf->CellExt('14%', 'Ort', 'B', 5, 'B'); 
    }
    if ($this->settings->tnDarstellung->option5) { 
      $this->pdf->CellExt('13%', 'Telefon', 'B', 5, 'B');
    }
    if (DBWorkBASysSettings::isBFI()) {
      $this->pdf->CellExt('7%', 'TN-Nr', 'B', 5, 'B');
    } else {
      $this->pdf->CellExt('7%', 'Kd-Nr', 'B', 5, 'B');
    }
    $this->pdf->CellExt('5%', 'Status', 'B', 5, 'B'); 
    if ($this->settings->spaltenanordnung->option4) { 
      $this->pdf->CellExt('5%', 'Pers-Nr', 'B', 5, 'B');
    }
    if ($this->settings->spaltenanordnung->option3) { 
      $this->pdf->CellExt('8%', 'Geb-Tag', 'B', 5, 'B');
    }
    if ($this->settings->spaltenanordnung->option1) { 
      $this->pdf->CellExt('13%', 'Bemerkung', 'B', 5, 'B');
    }

    $this->pdf->Ln();
  }

  private function createTextField($text): \Kufer\Web\Classes\Pdf\Helper\RenderObject
  {
    if ($this->isDoubleLineHeight()) {
      $result = new \Kufer\Web\Classes\Pdf\Helper\TextArea($this->pdf, array($text));
      $result->setLimit(2);

      return $result;
    } else {
      return new \Kufer\Web\Classes\Pdf\Helper\TextField($this->pdf, $text);
    }
  }

  
  public function _printRow($belegung, $cellHeight, $rowNum, $border)
  {
    if ($belegung == null) {
      $teilnehmer = new Teilnehmer();
      $teilnehmer->gebdat = '';
    } else {
      $teilnehmer = $belegung->teilnehmer;
    }

    $pdfRow = new \Kufer\Web\Classes\Pdf\Helper\Row($this->pdf);
    $pdfRow->setX('3%');
    $pdfRow->setFontSize(8);
    $pdfRow->setTextMargin(0.8);
    $pdfRow->setBorder((bool)$border);
    $pdfRow->setInnerBorders((bool)$border);

    $pdfRow->addColumn($this->createTextField((int)$rowNum), '3%');  
    $tnname = $teilnehmer->getVarValue('namevorname');
    if (\DBWorkBASysSettings::isDarmstadtFain()) {
      $tnname = $teilnehmer->getVarValue('vorname_name_ohne_komma');
    }
    $pdfRow->addColumn($this->createTextField($tnname), $this->_getNameWidth()); 

    if ($this->settings->tnDarstellung->option3) { 
      $pdfRow->addColumn($this->createTextField($teilnehmer->strasse), '17%'); 
      $pdfRow->addColumn($this->createTextField(\trim($teilnehmer->ort)), '14%');     
    }

    if ($this->settings->tnDarstellung->option5) { 
      $pdfRow->addColumn($this->createTextField($teilnehmer->getTelNrs()), '13%');
    }

    $pdfRow->addColumn($this->createTextField($teilnehmer->id), '7%'); 
    $pdfRow->addColumn($this->createTextField($belegung->status ?? ''), '5%'); 

    if ($this->settings->spaltenanordnung->option4) { 
      $pdfRow->addColumn($this->createTextField($teilnehmer->pers_nr), '5%');
    }

    if ($this->settings->spaltenanordnung->option3) { 
      $pdfRow->addColumn($this->createTextField($teilnehmer->gebdat), '8%');
    }

    if ($this->settings->spaltenanordnung->option1) { 
      $pdfRow->addColumn($this->createTextField($this->_getBemerkung($belegung)), '13%');
    }

    foreach ($pdfRow->getChildren() as $child) {
      $child->setBorder($border);
    }

    $bemerkung = \trim(StringOperations::removeLinebreaks($teilnehmer->info . ' ' . (\is_null($belegung) ? '' : $belegung->info)));
    if (\DBWorkBASysSettings::isInnsbruckStadt() && $bemerkung !== '') {
      if ($this->pdf->TriggersPageBreak($cellHeight + $pdfRow->getComputedHeight())) {
        $this->pdf->AddPage();
      }
    }

    $pdfRow->render();

    if (\DBWorkBASysSettings::isInnsbruckStadt() && $bemerkung !== '') {
      $this->pdf->CellAtX('3%', 'Information: ' . $bemerkung, '', '', 8, '90%', $border, $cellHeight); 
      $this->pdf->Ln($cellHeight);
    }
  }

  public function _printTNListe()
  {
    $border = $this->settings->spaltenanordnung->option5 ? 1 : 0;
    $belegungen = $this->_getBelegungen($this->kurs);
    $cellHeight = $this->getCellHeight();

    $i = 1;
    foreach ($belegungen as $belegung) {
      $this->_printRow($belegung, $cellHeight, $i, $border);
      $i++;
    }

    
    while ($this->_auffuellenBisSeitenende() && !$this->pdf->TriggersPageBreak($cellHeight)) {
      $this->_printRow(null, $cellHeight, $i, $border);
      $i++;
    }
  }

  protected function getCellHeight(): float
  {
    return 5;
  }

  public function getListBezeichnungForHTML()
  {
    return 'TeilnehmerlisteEinzeilig';
  }

  private function isDoubleLineHeight(): bool
  {
    return $this->settings->tnDarstellung->option8 ?? false;
  }
}