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

namespace Kufer\Web\Classes\Api\Combobox;

use Kufer\Web\Classes\Datamodul\RaumBestuhlung;
use Kufer\Web\Classes\Db\DBWorkRaumBestuhlung;
use Kufer\Web\Classes\Dbfilter\RaumBestuhlungenSQLFilter;

class ComboboxKurstagBestuhlung extends \Combobox
{
  public function __construct($pDataModul)
  {
    
    $kurstag = $pDataModul->getDatamodulByName('kurstag');

    parent::__construct($kurstag->bestuhlungid, $kurstag);
  }

  protected function getDatamodulAry(): array
  {
    
    $kurstag = $this->dataModul;

    $kursort = $kurstag->getKursort();
    if (empty($kursort->id)) {
      return array();
    }

    
    $hlbestuhlungen = \ArrayOperations::setAttributAsKey(\DBWorkHLBestuhlung::getDefaultInstance()->getAll(), 'id');

    $dbwBestuhlung = DBWorkRaumBestuhlung::getDefaultInstance();
    $filterBestuhlung = RaumBestuhlungenSQLFilter::create();
    $filterBestuhlung->isValid();
    $filterBestuhlung->equalsRaumId($kursort->id);

    return array_map(static function(RaumBestuhlung $bestuhlung) use ($hlbestuhlungen) {
      $hlbestuhlung = $hlbestuhlungen[$bestuhlung->bid] ?? null;

      $plaetzePlusTische = array();
      if (($bestuhlung->tische ?? 0) > 0) {
        $plaetzePlusTische[] = 'Tische: ' . $bestuhlung->tische;
      }
      if (($bestuhlung->plaetze ?? 0) > 0) {
        $plaetzePlusTische[] = 'Plätze: ' . $bestuhlung->plaetze;
      }

      $text = '';
      if (is_null($hlbestuhlung)) {
        $text .= implode('; ', $plaetzePlusTische);
      } else {
        $text .= $hlbestuhlung->bezeichnung . ' (' . implode('; ', $plaetzePlusTische) . ')';
      }

      $result = new class() extends \Datamodul {
        public $id;
        public $text;
      };

      $result->id = $bestuhlung->id;
      $result->text = $text;

      return $result;
    }, $dbwBestuhlung->findByFilter($filterBestuhlung));
  }

  protected function getValueFieldName(): string
  {
    return 'id';
  }

  protected function getTextFieldName(): string
  {
    return 'text';
  }

  protected function getDefaultOption(): ?\ComboboxOption
  {
    $option = new \ComboboxOption();
    $option->value = 0;
    $option->text = 'Keine Bestuhlung';
    $option->isSelected = is_null($this->selectedValue);

    return $option;
  }
}