<?php

/**
 * @copyright (c) Kufer Software GmbH, Loisachstrasse 4, D-84453 Mühldorf
 */

namespace Kufer\KuferTools\Utils\WssField;

abstract class WssFieldKursortKurzbezeichnung extends WssField
{
  
  private $dbwKursorte;

  public function __construct($datamodulColumn)
  {
    parent::__construct($datamodulColumn);
    $this->dbwKursorte = new \DBWorkKursorte(1, true);
  }

  
  abstract protected function getKursort($datamodulWert);

  
  abstract protected function setKursort($datamodulWert, $str);

  public function getFieldBearbeitbar($datamodulWert, $isFormular, string $requestPrefix = '')
  {
    
    $feld = parent::getFieldBearbeitbar($datamodulWert, $isFormular, $requestPrefix);

    if (isset($datamodulWert->kursortFeldReadonly) && $datamodulWert->kursortFeldReadonly) {
      $feld = str_replace('<input', '<input readonly', $feld);
    }

    
    
    $hinterlegung = $this->getHinterlegung(isset($datamodulWert->showRaumHinterlegungsButton) && $datamodulWert->showRaumHinterlegungsButton);

    return $feld . $hinterlegung;
  }

  public function getValue($datamodulWert, $isFormular = false)
  {
    $kursortMkText = $this->getKursort($datamodulWert);
    $kursort = $this->dbwKursorte->getKursortBymktext($kursortMkText);

    return is_null($kursort->id) ? $kursortMkText : $kursort->bezeichnung;
  }

  public function getChangedInfo($columnValues, $changedDm, $changedFields): array
  {
    $datamodul = $this->datamodulColumn->datamodul;
    $fieldname = $this->datamodulColumn->fieldname;
    if (isset($columnValues[$datamodul][$fieldname])) {
      $origValue = $changedDm->getVarValueEx('kursort', $datamodul);
      $newData = $columnValues[$datamodul][$fieldname];
      $kursort = $this->dbwKursorte->getKursortByBezeichnung($newData);
      $value = is_null($kursort->id) ? $newData : $kursort->mktext;
      if ($origValue != $value) {
        $changedDm = $this->setKursort($changedDm, $value);
        $changedFields[] = $this->getFieldName();
      }
    }

    return array('changed' => $changedDm, 'changedFields' => $changedFields);
  }

  protected function getHinterlegung($pShowHinterlegung)
  {
    if ($pShowHinterlegung) {
      $buttonStyle = 'position: absolute; right: 20px; top: -3px; font-size: 27px; color: #555; cursor:pointer;';
      $inputIds = array($this->datamodulColumn->datamodul . '_' . $this->datamodulColumn->fieldname);

      return \PageButtonsAPI::getHinterlegungSymbol(\HLDispatcher::HL_KURSORTE_KURSBEZEICHNUNG, $inputIds, 'button_hl_raumkurz', $buttonStyle, 'hlraumkurz_div', 'Raum');
    }

    return '';
  }
}