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

namespace Kufer\KuferTools\Mitarbeiter\KursUebersicht\Detailsreiter\Honorar\HammelburgVhs\VertragPdf;

class VertragDruckenUseCase extends \Kufer\KuferTools\Mitarbeiter\KursUebersicht\EinzelKursUseCase
{
  private $dozKursAry;

  public function __construct($request)
  {
    parent::__construct($request, new VertragDruckenResponse());
    $dbwDozKurs = new \DBWorkDozKurs();
    $this->dozKursAry = $dbwDozKurs->getDozKursDatenFromIDs($this->request->dozKursIds);
  }

  public static function getToolId()
  {
    return \ToolsAPI::TOOL_KURSPLANUNG_MA;
  }

  public static function getToolSectionId()
  {
    
    return 29;
  }

  public function hasAccess($pToolSectionId = null)
  {
    if (!parent::hasAccess()) {
      return false;
    }
    if (!$this->isVertragsDruckAllowed()) {
      return false;
    }

    return true;
  }

  
  private function isVertragsDruckAllowed()
  {
    if (\DBWorkBASysSettings::isHammelBurgKissingen()) {
      foreach ($this->dozKursAry as $dozKurs) {
        
        if ($dozKurs->vertrdruck != 'W') {
          return true;
        }
      } 
      
      return false;
    }
    
    return false;
  }

  public function action()
  {
    $kurs = $this->getKurs($this->request->knr);

    $dozenten = $this->getDozenten();

    $kursort = $this->getKursort($kurs->ort);
    $benutzer = $this->getBenutzer();
    $aussenstelle = $this->getAussenstelle($benutzer->aussenstelle);

    $vertragPdf = new Vertrag($kurs, $dozenten, $kursort, $benutzer, $aussenstelle);

    return $this->getResponse($vertragPdf);
  }

  protected function getResponse($vertragPdf)
  {
    $this->response->vertragPdf = $vertragPdf;

    return $this->response;
  }

  
  private function getBenutzer()
  {
    $user = $this->getUser();
    $dbwBenutzer = \DBWorkBASysUser::getDefaultInstance();

    return $dbwBenutzer->getBasysUser($user->ben);
  }

  private function getDozenten()
  {
    $dozentenIds = \ArrayOperations::mapAttribut($this->dozKursAry, 'dozent');
    $dbwDoz = \DBWorkDozenten::getDefaultInstance(1, true);

    return $dbwDoz->getDozentenByIDArray($dozentenIds);
  }

  private function getKursort($pOrt)
  {
    $dbwKursort = \DBWorkKursorte::getDefaultInstance();

    return $dbwKursort->getKursortbymktext($pOrt);
  }

  private function getAussenstelle($pAussenstBez)
  {
    $dbwAussenst = \DBWorkHLAussenstellen::getDefaultInstance();
    $aussenstelle = $dbwAussenst->getAussenstelleByBezeichner($pAussenstBez);

    return $aussenstelle ?? new \Aussenstelle();
  }
}

class VertragDruckenRequest
{
  public $knr;
  public $dozKursIds;
}

class VertragDruckenResponse extends \Kufer\KuferTools\Basis\UseCase\ToolResponse
{
  public $vertragPdf;
}