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

namespace webtools\lists;


#[\AllowDynamicProperties]
class TNDarstellung
{
  public $option1;
  public $option2;
  public $option3;
  public $option4;
  public $option5;
  public $option6;
  public $option7;
  public $option8;
  public $option9;
}


#[\AllowDynamicProperties]
class Spaltenanordnung
{
  
  public $option1;

  
  public $option2;

  
  public $option3;

  
  public $option4;

  
  public $option5;

  
  public $option6;

  
  public $option7;

  
  public $option8;

  
  public $option9;

  
  public $option1_text;

  
  public $option2_text;

  
  public $option3_text;

  
  public $option4_text;

  
  public $option5_text;

  
  public $option6_text;

  
  public $option7_text;

  
  public $option8_text;

  
  public $option9_text;
}


class Antwortboxen
{
  public $SpaltenUeb1;
  public $SpaltenUeb2;
  public $SpaltenUeb3;
  public $SpaltenUeb4;
  public $SpaltenUeb5;
}

class Freitexte
{
  public $textUnten;
  public $textOben;
}


#[\AllowDynamicProperties]
class Kopfbereich
{
  
  public $mitKursgebuehren;
  
  public $mitDozentenTelNr;
  
  public $ohneMinMaxTN;
  
  public $mitDauerdetails;
  
  public $ohneDauer;

  public $ohneKursOrt;
}


class Kurstage
{
  
  public $von;
  
  public $bis;
}


class Umfang
{
  
  public $filter;
  
  public $customStatus;
}


class Fusszeile
{
  
  public $text;
  
  public $bold;
  
  public $size;
}


class Druckbereich
{
  
  public $hochformat;
  
  public $auffuellen;
  
  public $auffuellArt;

  
  public $namegross = false;
}


#[\AllowDynamicProperties]
class TNSettings
{
  public $textObenRechts;
  public $textUnten;


  
  public $tnDarstellung;
  
  public $spaltenanordnung;
  
  public $kopfbereich;
  
  public $bemerkung;

  
  public const SORT_NAME = 'A';

  
  public const SORT_VORNAME = 'V';

  
  public const SORT_ANMELDEDATUM = 'N';

  
  public const SORT_FIRMENNAME = 'F';

  
  public $sortierung;
  
  public $umfang;
  
  public $fusszeile;
  
  public $fusszeilen;
  
  public $caption;
  
  public $druckbereich;

  
  public $antwortboxen;

  public $freitexte;
  public $kurstage;

  public function __construct()
  {
    
    $this->tnDarstellung = new TNDarstellung();
    $this->spaltenanordnung = new Spaltenanordnung();
    $this->kopfbereich = new Kopfbereich();
    $this->kurstage = new Kurstage();
    $this->umfang = new Umfang();
    $this->druckbereich = new Druckbereich();
    $this->antwortboxen = new Antwortboxen();
    $this->freitexte = new Freitexte();

    
    $this->fusszeilen = array();
    for ($i = 0; $i < 5; $i++) {
      $this->fusszeilen[] = new Fusszeile();
    }
  }

  
  public function loadFromPOST($pTnlist = null)
  {
    
    if (\PostOperations::isDefined('format')) {
      $this->druckbereich->hochformat = \PostOperations::getVarValue('format') == 'H';
    }
    $this->druckbereich->auffuellen = \PostOperations::isDefined('auffuellen');
    $this->druckbereich->auffuellArt = \PostOperations::getVarValue('auffuellart', 'S');
    $this->druckbereich->namegross = \PostOperations::isDefined('namegross');
    
    if (\PostOperations::isDefined('ueberschrift')) {
      $this->caption = \PostOperations::getVarValue('ueberschrift');
    }

    
    $count = count($this->fusszeilen);
    for ($i = 1; $i <= $count; $i++) {
      $fusszeile = $this->fusszeilen[$i - 1];
      $fusszeile->text = \PostOperations::getVarValue("textfusszeile$i");
      $fusszeile->size = \PostOperations::getVarValue("sizefusszeile$i");
      $fusszeile->bold = \PostOperations::isDefined("boldfusszeile$i");
      $this->fusszeilen[$i - 1] = $fusszeile;
    }

    
    if (\PostOperations::isDefined('umfang')) {
      $this->umfang->filter = \PostOperations::getVarValue('umfang');
    }
    if (\PostOperations::isDefined('customStatus')) {
      $this->umfang->customStatus = \PostOperations::getVarValue('customStatus');
    }

    
    if (!\is_null($pTnlist)) {
      $vars = get_object_vars($this->tnDarstellung);
      foreach ($vars as $name => $wert) {
        if ($pTnlist->getTNDarstellungEnabled($name)) {
          $this->tnDarstellung->{$name} = \PostOperations::isDefined("tn_$name");
        }
      }

      
      $vars = get_object_vars($this->spaltenanordnung);
      foreach ($vars as $name => $wert) {
        if (!\StringOperations::endsWith($name, '_text') && $pTnlist->getSpaltenAnordnungEnabled($name)) {
          $this->spaltenanordnung->{$name} = \PostOperations::isDefined("sp_$name");
        }
      }
    }

    
    $vars = get_object_vars($this->kopfbereich);
    foreach ($vars as $name => $wert) {
      $this->kopfbereich->{$name} = \PostOperations::isDefined("kb_$name");
    }

    
    if (\PostOperations::isDefined('bemerkung')) {
      $this->bemerkung = \PostOperations::getVarValue('bemerkung');
    }

    
    $this->fusszeile = \PostOperations::getVarValue('fusszeile', LISTEN_FUSSZEILE_OHNE);

    
    $this->sortierung = \PostOperations::getVarValue('sortierung');

    $spaltenueb = 'SpaltenUeb';
    for ($i = 1; $i < 6; $i++) {
      if (\PostOperations::isDefined('antwortbox' . $i)) {
        $spaltenuebi = $spaltenueb . $i;
        $this->antwortboxen->{$spaltenuebi} = \PostOperations::getVarValue('antwortbox' . $i);
      }
    }

    $this->freitexte->textOben = \PostOperations::getVarValue('textoben');
    $this->freitexte->textUnten = \PostOperations::getVarValue('textunten');
  }

  

  
  public function loadFromReqObj($pPostSettings)
  {
    $this->druckbereich->hochformat = $pPostSettings->druckbereich->hochformat;
    $this->druckbereich->auffuellen = $pPostSettings->druckbereich->auffuellen;
    $this->druckbereich->auffuellArt = $pPostSettings->druckbereich->auffuellArt;
    $this->druckbereich->namegross = $pPostSettings->druckbereich->namegross;

    
    $this->caption = $pPostSettings->caption;

    
    $this->umfang->filter = $pPostSettings->umfang->filter;
    $this->umfang->customStatus = $pPostSettings->umfang->customStatus;

    
    $count = count($this->fusszeilen);
    for ($i = 1; $i <= $count; $i++) {
      $fusszeile = $this->fusszeilen[$i - 1];
      $fusszeile->text = $pPostSettings->fusszeilen[$i - 1]->text;
      $fusszeile->size = $pPostSettings->fusszeilen[$i - 1]->size;
      $fusszeile->bold = $pPostSettings->fusszeilen[$i - 1]->bold;
      $this->fusszeilen[$i - 1] = $fusszeile;
    }

    if (is_array($pPostSettings->antwortboxen)) {
      foreach ($pPostSettings->antwortboxen as $key => $antwortbox) {
        $varname = 'SpaltenUeb' . ($key + 1);
        $this->antwortboxen->{$varname} = $antwortbox;
      }
    }

    $this->freitexte->textOben = $pPostSettings->textObenRechts;
    $this->freitexte->textUnten = $pPostSettings->textUnten;

    
    $vars = get_object_vars($this->tnDarstellung);
    foreach ($vars as $name => $wert) {
      $tnname = 'tn_' . $name;
      if (isset($pPostSettings->tnDarstellung->{$tnname}) && $pPostSettings->tnDarstellung->{$tnname} != '') {
        $this->tnDarstellung->{$name} = $pPostSettings->tnDarstellung->{$tnname};
      }
    }

    
    $vars = get_object_vars($this->spaltenanordnung);
    foreach ($vars as $name => $wert) {
      $spname = 'sp_' . $name;
      if (\StringOperations::endsWith($name, '_text') && isset($pPostSettings->spaltenanordnung->{$spname})) {
        $this->spaltenanordnung->{$name} = $pPostSettings->spaltenanordnung->{$spname};
      } elseif (isset($pPostSettings->spaltenanordnung->{$spname}) && $pPostSettings->spaltenanordnung->{$spname} != '') {
        $this->spaltenanordnung->{$name} = $pPostSettings->spaltenanordnung->{$spname};
      }
    }
    
    $vars = get_object_vars($this->kopfbereich);
    foreach ($vars as $name => $wert) {
      $kbname = 'kb_' . $name;
      $this->kopfbereich->{$name} = $pPostSettings->kopfbereich->{$kbname};
    }
    
    $this->bemerkung = $pPostSettings->bemerkung;
    
    $this->fusszeile = $pPostSettings->fusszeile;
    
    $this->sortierung = $pPostSettings->sortierung;
  }

  

  
  public function toTNListSettings()
  {
    $obj = new \TNListSettings();

    
    $vars = get_object_vars($this->tnDarstellung);
    foreach ($vars as $name => $wert) {
      if ($wert) {
        $obj->setTeilnehmer($name);
      }
    }

    
    $vars = get_object_vars($this->spaltenanordnung);
    foreach ($vars as $name => $wert) {
      if (!\StringOperations::endsWith($name, '_text')) {
        if ($wert) {
          $obj->setColumns($name);
        }
      } else {
        $obj->{$name} = $wert;
      }
    }

    
    $vars = get_object_vars($this->kopfbereich);
    foreach ($vars as $name => $wert) {
      if (!\StringOperations::endsWith($name, '_text')) {
        if ($wert) {
          $obj->setHeader($name);
        }
      } else {
        $obj->{$name} = $wert;
      }
    }

    
    $obj->caption = $this->caption;
    

    $obj->filter = $this->umfang->filter;

    $obj->customState = $this->umfang->customStatus;
    
    $obj->sort = $this->sortierung;
    
    $obj->footer = $this->fusszeile;
    
    if (isset($this->druckbereich->hochformat)) {
      $obj->portrait = $this->druckbereich->hochformat;
    }

    
    if ($this->druckbereich->auffuellen) {
      $obj->padding = $this->druckbereich->auffuellArt;
    } else {
      $obj->padding = ' ';
    }

    
    $obj->comment = $this->bemerkung;

    
    for ($i = 0; $i < 5; ++$i) {
      $obj->{'footer' . ($i + 1)} = $this->fusszeilen[$i]->text ?? '';
      $obj->{'footer' . ($i + 1) . 'size'} = $this->fusszeilen[$i]->size ?? '';
      $obj->{'footer' . ($i + 1) . 'bold'} = $this->fusszeilen[$i]->bold ?? '';
    }

    $obj->SpaltenUeb1 = $this->antwortboxen->SpaltenUeb1;
    $obj->SpaltenUeb2 = $this->antwortboxen->SpaltenUeb2;
    $obj->SpaltenUeb3 = $this->antwortboxen->SpaltenUeb3;
    $obj->SpaltenUeb4 = $this->antwortboxen->SpaltenUeb4;
    $obj->SpaltenUeb5 = $this->antwortboxen->SpaltenUeb5;

    $obj->text1 = $this->freitexte->textOben;
    $obj->text2 = $this->freitexte->textUnten;

    return $obj;
  }

  
  public function fromTNListSettings($settings)
  {
    
    if (!isset($this->tnDarstellung)) {
      $this->tnDarstellung = new TNDarstellung();
    }
    $vars = get_object_vars($this->tnDarstellung);
    foreach ($vars as $name => $value) {
      $this->tnDarstellung->{$name} = $settings->isTeilnehmerSet($name);
    }

    
    if (!isset($this->spaltenanordnung)) {
      $this->spaltenanordnung = new Spaltenanordnung();
    }
    $vars = get_object_vars($this->spaltenanordnung);
    foreach ($vars as $name => $value) {
      if (!\StringOperations::endsWith($name, '_text')) {
        $this->spaltenanordnung->{$name} = $settings->isColumnsSet($name);
      }
    }

    
    if (!isset($this->kopfbereich)) {
      $this->kopfbereich = new Kopfbereich();
    }
    $vars = get_object_vars($this->kopfbereich);
    foreach ($vars as $name => $value) {
      $this->kopfbereich->{$name} = $settings->isHeaderSet($name);
    }

    
    $this->caption = $settings->caption;
    
    if (!isset($this->umfang)) {
      $this->umfang = new Umfang();
    }
    $this->umfang->filter = $settings->filter;
    $this->umfang->customStatus = $settings->customState;
    
    $this->sortierung = $settings->sort;
    
    $this->fusszeile = $settings->footer;
    
    if (!isset($this->druckbereich)) {
      $this->druckbereich = new Druckbereich();
    }
    $this->druckbereich->hochformat = $settings->portrait;

    
    switch ($settings->padding) {
      case ' ':
        $this->druckbereich->auffuellen = false;
        break;
      case 'M':
        $this->druckbereich->auffuellen = true;
        $this->druckbereich->auffuellArt = 'M';
        break;
      case 'S':
        $this->druckbereich->auffuellen = true;
        $this->druckbereich->auffuellArt = 'S';
        break;
    }

    
    $this->bemerkung = $settings->comment;

    
    if (!isset($this->fusszeilen)) {
      $this->fusszeilen = array(new Fusszeile(), new Fusszeile(), new Fusszeile(), new Fusszeile(), new Fusszeile());
    }
    for ($i = 0; $i < 5; ++$i) {
      $this->fusszeilen[$i]->text = $settings->{'footer' . ($i + 1)};
      $this->fusszeilen[$i]->size = $settings->{'footer' . ($i + 1) . 'size'};
      $this->fusszeilen[$i]->bold = $settings->{'footer' . ($i + 1) . 'bold'};
    }

    for ($i = 1; $i <= 5; ++$i) {
      $this->antwortboxen->{'SpaltenUeb' . $i} = $settings->{'SpaltenUeb' . $i};
    }

    if (!$this->freitexte) {
      $this->freitexte = new Freitexte();
    }
    $this->freitexte->textOben = $settings->text1;
    $this->freitexte->textUnten = $settings->text2;
  }

  
  public function fromHLTNList($obj)
  {
    
    switch ($obj->sortierung) {
      case 'A':
        $this->sortierung = 'A';
        break;
      case 'D':
        $this->sortierung = 'N';
        break;
    }

    
    if (\StringOperations::strpos($obj->tn, 'M') !== false) {
      $this->tnDarstellung->option1 = true;
    }
    if (\StringOperations::strpos($obj->tn, 'Z') !== false) {
      $this->tnDarstellung->option2 = true;
    }
    if (\StringOperations::strpos($obj->tn, 'S') !== false) {
      $this->tnDarstellung->option3 = true;
    }
    if (\StringOperations::strpos($obj->tn, 'O') !== false) {
      $this->tnDarstellung->option4 = true;
    }
    if (\StringOperations::strpos($obj->tn, 'L') !== false) {
      $this->tnDarstellung->option5 = true;
    }
    if (\StringOperations::strpos($obj->tn, 'E') !== false) {
      $this->tnDarstellung->option6 = true;
    }
    if (\StringOperations::strpos($obj->tn, 'F') !== false) {
      $this->tnDarstellung->option7 = true;
    }
    if (\StringOperations::strpos($obj->tn, 'X') !== false) {
      $this->tnDarstellung->option8 = true;
    }

    
    $this->kopfbereich->mitKursgebuehren = $obj->gebuehren == 'W';
    $this->kopfbereich->mitDozentenTelNr = $obj->dozententelefon == 'W';
    $this->kopfbereich->ohneMinMaxTN = $obj->minmax == 'W';
    $this->kopfbereich->mitDauerdetails = $obj->dauerdetail == 'W';
    $this->kopfbereich->ohneDauer = $obj->ohnedauer == 'W';

    
    $this->spaltenanordnung->option1 = $obj->bemerkung == 'W';
    $this->spaltenanordnung->option2 = $obj->option5 == 'W';
    $this->spaltenanordnung->option3 = $obj->mgebdat == 'W';
    $this->spaltenanordnung->option4 = $obj->kurzname == 'W';
    $this->spaltenanordnung->option5 = $obj->gitternetz == 'W';
    $this->spaltenanordnung->option6 = $obj->bankdatenindex == 1;

    
    $this->druckbereich->hochformat = $obj->querhoch == 'H';
    $this->druckbereich->auffuellen = $obj->leerzeilen == 'W';
    if ($obj->leerzseitenende == 'W') { 
      $this->druckbereich->auffuellArt = 'S';
    }
    if ($obj->leerzmaxtn == 'W') { 
      $this->druckbereich->auffuellArt = 'M';
    }

    
    
    switch ($obj->fusszeilen) {
      default:
      case 'O': 
        $this->fusszeile = LISTEN_FUSSZEILE_OHNE;
        break;
      case 'A': 
        $this->fusszeile = LISTEN_FUSSZEILE_ALLE;
        break;
      case 'L': 
        $this->fusszeile = LISTEN_FUSSZEILE_LETZTE;
        break;
    }

    for ($i = 0; $i < 5; ++$i) {
      $this->fusszeilen[$i]->text = $obj->{'fusszeile' . ($i + 1)};
      $this->fusszeilen[$i]->size = $obj->{'fusszeile' . ($i + 1) . 'gr'};
      
      $this->fusszeilen[$i]->bold = $obj->{'reservekurz' . ($i + 2)} == 'W';
    }

    $this->antwortboxen->SpaltenUeb1 = $obj->SpaltenUeb1;
    $this->antwortboxen->SpaltenUeb2 = $obj->SpaltenUeb2;
    $this->antwortboxen->SpaltenUeb3 = $obj->SpaltenUeb3;
    $this->antwortboxen->SpaltenUeb4 = $obj->SpaltenUeb4;
    $this->antwortboxen->SpaltenUeb5 = $obj->SpaltenUeb5;

    $this->freitexte->textOben = $obj->text1;
    $this->freitexte->textUnten = $obj->text2;

    
    $this->caption = $obj->bezeichnung;

    
    switch ($obj->umfangart) {
      case 'T': 
        $this->umfang->filter = 'A';
        break;
      case 'A': 
        $this->umfang->filter = '*';
        break;
      case 'S': 
        $this->umfang->filter = 'C';
        break;
    }
    $this->umfang->customStatus = $obj->umfangstatus;

    
    switch ($obj->reserveinteger1) {
      case 1: 
        $this->bemerkung = 'I';
        break;
      case 2: 
        $this->bemerkung = 'E';
        break;
      case 3: 
        $this->bemerkung = 'IE';
        break;
      case 4: 
        $this->bemerkung = 'EI';
        break;
    }
  }
}