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


class HMDruckliste extends DruckListe
{
  public const MIT_KURSTAG_AUSFALL = 0;
  public const OHNE_KURSTAG_AUSFALL = 1;
  public const NUR_KURSTAG_AUSFALL = 2;

  
  public $print1room;

  public $raumart;

  
  protected $raumTage;

  
  protected $nurRaumart;

  
  protected $ohneRaumart;

  
  public function create($pDozId = -1, $pPrintAllowed4User = false)
  {
    $this->print1room = false;
    
    if (!$pPrintAllowed4User) {
      $this->ausgabeFault($this->getWarntext());
    } else {
      if (!empty($this->selnr)) {
        
        
        $selnrary = explode(':', $this->selnr);
        
        if (count($selnrary) == 1) {
          $this->print1room = true;
        }
        
        $this->pdf = $this->__initPDF();
        $this->_prepare();
        $this->pdf->AddPage();
        $this->_createContent();
        $this->footer();
        $this->pdf->Output();
      }
    }
  }

  
  public function _prepare($pKnr = '')
  {
    parent::_prepare($pKnr);

    
    $this->raumTage = $this->kursetage;

    
    $this->raumart = $this->settings->weitereEinstellungen->raumart;
    $this->nurRaumart = $this->settings->weitereEinstellungen->nurRaumart;
    $this->ohneRaumart = $this->settings->weitereEinstellungen->ohneRaumart;

    
    if ($this->isSperrzeitenAnzeigen()) {
      $dbwOrtVerf = \DBWorkOrtVerf::getDefaultInstance();
      $dbwKursOrte = \DBWorkKursorte::getDefaultInstance();

      
      $selraumnrary = explode(':', $this->selnr);

      $vondat = $this->settings->kurstage->von;
      if (empty($vondat)) {
        $vondat = $this->kurstage->von;
        if (empty($vondat)) {
          $vondat = null;
        }
      }

      $bisdat = $this->settings->kurstage->bis;
      if (empty($bisdat)) {
        $bisdat = $this->kurstage->bis;
        if (empty($bisdat)) {
          $bisdat = null;
        }
      }

      
      $dbwOrtVerf->newSearch();
      $dbwOrtVerf->fromobject->vondat = $vondat;
      $dbwOrtVerf->toobject->bisdat = $bisdat;

      $ortVerfAry = $dbwOrtVerf->getKursorteVerfByRaumIds($selraumnrary);

      
      
      foreach ($ortVerfAry as $ortVerf) {
        for ($aktDatum = $ortVerf->vondat;
          $this->dtop->isDateBefore($aktDatum, $ortVerf->bisdat) || strcmp($aktDatum, $ortVerf->bisdat) == 0;
          $aktDatum = $this->dtop->getNextDate($aktDatum, 1)) {
          if (\DateTimeOperations::isDateBetween($ortVerf->vondat, $ortVerf->bisdat, $aktDatum)
             && ($ortVerf->wochentag == 0 || $ortVerf->wochentag == $this->dtop->getWeekDayFromDate($aktDatum))) {
            
            $kursOrt = $dbwKursOrte->getKursort($ortVerf->ortnr);

            $kurstag = new \Kurstag();
            $kurstag->kurs = new \Kurs();
            $kurstag->kursort = new \Kursort();

            $kurstag->ort = $kursOrt->mktext;
            $kurstag->datum = $aktDatum;
            $kurstag->zeit_beg = $ortVerf->vonuhr;
            $kurstag->zeit_ende = $ortVerf->bisuhr;
            $kurstag->kursort->art = $kursOrt->art;
            $kurstag->knr = 'Sperrzeit';
            $kurstag->kurs->kurzbez = $ortVerf->begruendung;
            $kurstag->kurs->ende_dat = $ortVerf->bisdat;
            $this->raumTage[] = $kurstag;
          }
        }
      }
    }

    
    usort($this->raumTage, array('DruckListe', 'kTageCmp'));
  }

  
  public function isAllowedToPrint($pToolId, $pVarPrefix = 'totalraumidstr_')
  {
    $allowedNrAry = explode(':', SessionOperations::getVarValueWTIntern($pVarPrefix . $pToolId));

    return $this->selNrInArray($allowedNrAry);
  }

  
  public function _getZusatzspalten()
  {
    $result = '<fieldset id="zusatzspalten"><legend>Zusatzspalten</legend>';
    $vars = isset($this->settings->zusatzSpalten) ? get_object_vars($this->settings->zusatzSpalten) : array();
    foreach ($vars as $name => $value) {
      $displayName = $this->getZusatzspaltenText($name);
      $disabled = !$this->getZusatzspaltenEnabled($name);

      $checked = $this->settings->zusatzSpalten->{$name};
      $result .= $this->htmlop->CreateInputTag("zus_$name", 'checkbox', "zus_$name", '', 1, '', $checked, $disabled);
      $result .= '<label for="zus_' . CleanOperations::cleanStringForHtml($name) . '">' . CleanOperations::cleanStringForHtml($displayName) . '</label>' . BR_WT;
    }
    $result .= '</fieldset>';

    return $result;
  }

  
  public function fieldname()
  {
    return '<fieldset id="kurstage"><legend>im Zeitraum</legend>';
  }

  
  public function getZusatzspaltenText($optionName)
  {
  }

  
  public function getZusatzspaltenEnabled(string $optionName): bool
  {
    return true;
  }

  
  public function setDrucksettings()
  {
    $this->settings = new webtools\hmlisten\DruckHMSettings();
  }

  
  public function setKurstagary($pDbwkurstage)
  {
    $selraumnrary = explode(':', $this->selnr);
    $this->kursetage = array();
    
    foreach ($selraumnrary as $raumnr) {
      $this->kursetage = array_merge($this->kursetage, $pDbwkurstage->getKurstagebyRaum($raumnr));
    }
    usort($this->kursetage, array('DruckListe', 'kTageCmp'));
  }

  public function initKurstage()
  {
    $dbwbassem = new DBWorkBasysSettingSem();
    $bassettingsem = $dbwbassem->getSettingsSemester();
    
    $this->kurstage = (object)(array('von' => $bassettingsem->sembegin, 'bis' => $bassettingsem->semende));
  }

  
  public function getKurstageEnabled()
  {
    return true;
  }

  
  public function _createHeader($pKurs = '')
  {
    $this->_createHeaderTop('Datum:');

    
    if (!($this->settings->title1)) {
      $this->setTitle1();
    }
    $this->pdf->CellAtX('3%', $this->settings->title1, 'B', '', 14);
    $this->pdf->CellAtX('80%', 'Seite:         ' . $this->pdf->PageNo());
    $maxwidth = $this->getWidth4Title();
    if ($this->pdf->GetStringWidth($this->settings->title1) > $maxwidth) {
      $this->pdf->ln(7);
    }
    $this->pdf->ln(8);

    
    $this->pdf->CellAtX('3%', 'Kurse von ' . $this->kurstage->von . ' - ' . $this->kurstage->bis, 'B', '', 11, '93%');
    $this->pdf->ln(8);
    
    $this->printSubtitle();
    $this->pdf->ln(3);
  }

  
  protected function _createHeaderTop($pDatumsText)
  {
    $allgsettings = AllgSettingsAPI::getAllgSettings();
    
    $this->pdf->ln();
    
    $this->pdf->CellAtX('3%', StringOperations::html_entity_decode($allgsettings->vhsname), 'B', '', 16);
    
    $this->pdf->CellAtX('80%', $pDatumsText . $this->dtop->getDateNow());
    $this->pdf->ln(8);
  }

  
  public function getWarntext($pPrintAllowed4User = true)
  {
    return ' Sie haben keine Zugriffsberechtigung auf einen oder mehrere der angefragten Räume. Bitte setzen Sie sich mit der Einrichtung'
      . ' in Verbindung, damit diese Ihnen die entsprechenden Rechte gibt.';
  }

  
  public function _getZeitbereich($changeHL = '')
  {
    
    if ($changeHL) {
      return '';
    }
    $von = $this->settings->zeitbereich->zeitvon;
    $bis = $this->settings->zeitbereich->zeitbis;
    $result = '<fieldset id="zeitbereichsmall"><legend>Uhrzeit</legend>';

    $result .= "<div class = 'uhrzeitvon'>"
     . '<label id="l_zeit_von" for="zeit_von">von:</label>'
     . $this->htmlop->CreateInputTag('zeit_von', 'text', 'zeit_von', 'val_time', $von, '', false, $changeHL, 5);
    $result .= '</div>';

    $result .= "<div class = 'uhrzeitbis'>"
     . '<label id="l_zeit_bis" for="zeit_bis">bis:</label>'
     . $this->htmlop->CreateInputTag('zeit_bis', 'text', 'zeit_bis', 'val_time', $bis, '', false, $changeHL, 5);
    $result .= '</div>';
    $result .= '</fieldset>';

    return $result;
  }

  
  public function _getHausmeisterOptionen(bool $changeHL = false): string
  {
    

    $result = '<fieldset id="weitere_einstellungen"><legend>Weitere Einstellungen</legend><div>';

    
    
    if (!$changeHL) {
      
      

      $result .= '<div>'
                   . $this->htmlop->CreateInputTag('nur_raumart', 'checkbox', 'nur_raumart', '', '', 'onClick="raumart_fuer()"', false, $changeHL)
                   . 'nur für Raumart:';
      $result .= ' '
                   . $this->htmlop->CreateInputTag('ohne_raumart', 'checkbox', 'ohne_raumart', '', '', 'onClick="raumart_ohne()"', false, $changeHL)
                   . 'nur ohne Raumart:</div>';
      $result .= '<div>'
                   . $this->htmlop->CreateInputTag('raumart', 'text', 'raumart', '', '', 'size="40"', false, $changeHL, 50);
      $result .= $this->_GetRaumArtHinterlegungsButton(\HLDispatcher::HL_RAUMART, 'raumart') . '</div>' . BR_WT;
      
      $checked = $this->settings->einstellDarstellung->option2 ?? false;
      $result .= '<div>'
                   . $this->htmlop->CreateInputTag('sperrzeit', 'checkbox', '', '', '', '', $checked, $changeHL)
                   . 'Sperrzeiten anzeigen</div>';
      $checked = $this->settings->einstellDarstellung->option3 ?? false;
      $result .= '<div>'
                   . $this->htmlop->CreateInputTag('neue_seite', 'checkbox', '', '', '', '', $checked, $changeHL)
                   . 'neue Seite pro Tag</div>';
    }
    
    

    $checked = $this->settings->einstellDarstellung->option1 ?? false;
    $result .= '<div>'
               . $this->htmlop->CreateInputTag('kurzbez4Ort', 'checkbox', '', '', '', '', $checked)
               . 'Kurzbezeichnung für den Raum</div>';
    $result .= '</div>';
    $result .= '</fieldset>';

    return $result;
  }

  public function getEinstellDarstellungNameForOption(string $optionName): ?string
  {
    switch ($optionName) {
      default: return parent::getEinstellDarstellungNameForOption($optionName);
      case 'option1': return 'Kurzbezeichnung für den Raum';
      case 'option2': return 'Sperrzeiten anzeigen';
      case 'option3': return 'neue Seite pro Tag';
    }
  }

  protected function isKurzbezeichnungFuerDenRaum(): bool
  {
    return $this->settings->einstellDarstellung->option1 ?? false;
  }

  protected function isSperrzeitenAnzeigen(): bool
  {
    return $this->settings->einstellDarstellung->option2 ?? false;
  }

  protected function isNeueSeiteProTag(): bool
  {
    return $this->settings->einstellDarstellung->option3 ?? false;
  }

  
  public function _GetRaumArtHinterlegungsButton(int $pTyp = \HLDispatcher::HL_RAUMART, string $pFieldID = 'raumart'): string
  {
    return
      '&nbsp;<a style="vertical-align: bottom;" href="#formular" '
      . 'onClick="window.open(\'hlindex.php?type=' . CleanOperations::CleanInt($pTyp) . '&amp;field=' . CleanOperations::cleanStringForJs($pFieldID)
      . '\', \'_blank\', \'height=200, width=140, scrollbars=yes\');">'
      . '<img border="0" src="layout/button_hinterlegung.gif" title="Hinterlegung öffnen"'
      . ' alt="Hinterlegung" />'
      . '</a>';
  }

  
  public function _getAusfallEinstellungen(): string
  {
    $result = '<fieldset id="ausfall"><legend>Ausfall</legend>';
    $vars = isset($this->settings->ausfallEinstellungen) ? get_object_vars($this->settings->ausfallEinstellungen) : array();
    $values = array('option1' => self::MIT_KURSTAG_AUSFALL, 'option2' => self::OHNE_KURSTAG_AUSFALL, 'option3' => self::NUR_KURSTAG_AUSFALL);
    foreach ($vars as $name => $value) {
      $checked = $this->settings->ausfallEinstellungen->{$name};
      $result .= $this->htmlop->CreateInputTag('kurstag_ausfall', 'radio', "ausf_$name", '', $values[$name], '', $checked);
      $result .= '<label for="ausf_' . CleanOperations::cleanStringForHtml($name) . '">' . $this->_getAusfallEinstellungenText($name) . '</label>' . BR_WT;
    }
    $result .= '</fieldset>';

    return $result;
  }

  public function _getAusfallEinstellungenText($optionName): string
  {
    switch ($optionName) {
      case 'option1':
        return 'alle Kurstage';
      case 'option2':
        return 'nur nicht ausgefallene Kurstage';
      case 'option3':
        return 'nur ausgefallene Kurstage';
    }

    return '';
  }
}