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

namespace Kufer\Web\KuferTools\Dozent\KursUebersicht\Detailsreiter\Honorar\Vertrag\Utils;

abstract class VertragUtils
{
  protected $dozKurs;

  public function __construct($dozKurs)
  {
    $this->dozKurs = $dozKurs;
  }

  public static function getVertragUtils($knr)
  {
    $dozkurs = static::getDozKursByKnr($knr);

    return new static($dozkurs);
  }

  protected static function getDozKursByKnr($knr)
  {
    return \DozKursAPI::getDozKursByKnr($knr);
  }

  abstract public function isVertragsDruckAllowed();

  abstract public function isVertragAkzeptierenAllowed();

  abstract public function isVertragAblehnenAllowed();

  public function getDozKurs()
  {
    return $this->dozKurs;
  }

  public function isVertragBereitsAkzeptiert()
  {
    return !\DateTimeOperations::isDateTimeEmptyOrDefault($this->dozKurs->zurueck)
      && \DateTimeOperations::isValidDateTime(
        $this->dozKurs->zurueck,
        \DateTimeOperations::DATETIME_FORMAT_FULL
      );
  }

  public function isVertragBereitsAbgelehnt()
  {
    return !\DateTimeOperations::isDateTimeEmptyOrDefault($this->dozKurs->reklamation_dat)
      && \DateTimeOperations::isValidDateTime(
        $this->dozKurs->reklamation_dat,
        \DateTimeOperations::DATETIME_FORMAT_FULL
      );
  }

  public function vertragAkzeptieren()
  {
    \DozKursAPI::akzeptiereVertrag($this->dozKurs);
  }

  public function vertagAblehnen()
  {
    \DozKursAPI::ablehnenVertrag($this->dozKurs);
  }

  
  public function vertragsDruckAllowedByCheckbox()
  {
    return $this->dozKurs->vertrdruck != 'W';
  }

  
  public function isVertragAkzeptierenMitEingabefeld()
  {
    return static::getToolsSettings()->textfieldIfVertragAkzeptieren;
  }

  
  public function isVertragAblehnenMitEingabefeld()
  {
    return static::getToolsSettings()->textfieldIfVertragAblehnen;
  }

  public function teilnahmeDigitalesVertragsverfahren()
  {
    return true;
  }

  
  public static function getToolsSettings(): \ToolSettingsBASys
  {
    return \ToolSettingsAPI::getToolSettings(\ToolsAPI::TOOL_KURSUEBERSICHT_DOZ);
  }

  
  public static function hasEinrichtungAccessToVertragDrucken(): bool
  {
    return static::getToolsSettings()->allowVertragDrucken
      && static::hasEinrichtungAccessToVertragFunktionen();
  }

  
  public static function hasEinrichtungAccessToVertragAkzeptieren(): bool
  {
    return static::getToolsSettings()->allowVertragAkzeptieren
      && static::hasEinrichtungAccessToVertragFunktionen();
  }

  
  public static function hasEinrichtungAccessToVertragAblehnen(): bool
  {
    return static::getToolsSettings()->allowVertragAblehnen
    && static::hasEinrichtungAccessToVertragFunktionen();
  }

  
  public static function hasEinrichtungAccessToVertragStatus(): bool
  {
    return static::getToolsSettings()->allowVertragsStatus
      && static::hasEinrichtungAccessToVertragFunktionen();
  }

  
  public static function hasEinrichtungSpecialAccessToVertragFunktionen(): bool
  {
    return \DBWorkBASysSettings::isMVHS()
    || \DBWorkBASysSettings::isMendenVhs()
    || \DBWorkBASysSettings::isUnnaVhs()
    || \DBWorkBASysSettings::isSchwabachVhs()
    || \DBWorkBASysSettings::isLengerichVhs()
    || \DBWorkBASysSettings::isEchingVhs()
    || \DBWorkBASysSettings::isOlchingVhs()
    || \DBWorkBASysSettings::isSchrobenhausenVhs()
    || \DBWorkBASysSettings::isAichachVhs()
    || \DBWorkBASysSettings::isGlindeVhs()
    || \DBWorkBASysSettings::isHammelBurgKissingen()
    || \DBWorkBasysSettings::isStarnbergerSeeVhs()
    || \DBWorkBASysSettings::isRheinsieg()
    || \DBWorkBasysSettings::isGrafingVHS()
    || \DBWorkBASysSettings::isUnteresRemstalVhs()
    || \DBWorkBASysSettings::isIHK()
    || \DBWorkBASysSettings::isGilchingVhs();
  }

  
  public static function hasEinrichtungAccessToVertragFunktionen(): bool
  {
    if (\SessionOperations::isReplikatNichtDMZPraesentation()) {
      return true;
    }

    $hlgrundsys = \DBWorkHLGrundSys::getDefaultInstance()->getSetting(\DBWorkHLGrundSys::KEY_ONLINE_VERTRAEGE);
    if ($hlgrundsys !== false && $hlgrundsys->wert === 'W') {
      return true;
    }

    return static::hasEinrichtungSpecialAccessToVertragFunktionen()
      || \DBWorkBASysSettings::isWelsVhs()
      || \DBWorkBASysSettings::isSalzburgVhs()
      || \DBWorkBASysSettings::isBraunschweig()
      || \DBWorkBASysSettings::isMeppenVHS()
      || \DBWorkBASysSettings::isBergischeVhs()
      || \DBWorkBASysSettings::isGarchingVhs();
  }

  
  public static function getVertragUtilsFunction()
  {
    if (\SessionOperations::isReplikatNichtDMZPraesentation()) {
      return static function($knr) { return VertragUtilsDemo::getVertragUtilsDemo($knr); };
    } elseif (\DBWorkBASysSettings::isGilchingVhs()) {
      return static function($knr) { return VertragUtilsGilchingVhs::getVertragUtils($knr); };
    } elseif (\DBWorkBASysSettings::isUnnaVhs()) {
      return static function($knr) { return VertragUtilsUnnaVhs::getVertragUtils($knr); };
    } elseif (\DBWorkBASysSettings::isSchwabachVhs()) {
      return static function($knr) { return VertragUtilsSchwabachVhs::getVertragUtils($knr); };
    } elseif (\DBWorkBASysSettings::isGlindeVhs()) {
      return static function($knr) { return VertragUtilsGlindeVhs::getVertragUtils($knr); };
    } elseif (\DBWorkBASysSettings::isHammelBurgKissingen()) {
      return static function($knr) { return VertragUtilsHammelburgVhs::getVertragUtils($knr); };
    } elseif (\DBWorkBASysSettings::isGrafingVHS()) {
      return static function($knr) { return VertragUtilsGrafingVhs::getVertragUtils($knr); };
    } elseif (self::hasEinrichtungAccessToVertragFunktionen()) {
      return static function($knr) { return VertragUtilsDefaultDruckenAkzeptierenAblehnen::getVertragUtils($knr); };
    } else {
      return null;
    }
  }
}