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

namespace Kufer\KuferTools\Dozent\KursUebersicht\Detailsreiter\Honorar\VertragDrucken;
use Kufer\KuferTools\Dozent\KursUebersicht\Detailsreiter\Honorar\Utils\VertraegeUtils as VertraegeUtils;
use Kufer\KuferTools\Basis\Presenter\FehlermeldungPresenter as FehlermeldungPresenter;

class VertragDruckenUseCase extends \Kufer\KuferTools\Dozent\KursUebersicht\EinzelKursUseCase
{
  public function __construct($request)
  {
    parent::__construct($request, new VertragDruckenResponse);
  }
  
  public static function getToolId()
  {
    return TOOL_KURSUEBERSICHT_DOZ;
  }
  
  public static function getToolSectionId()
  {
    return 320;
  }
  
  public function hasAccess($pToolSectionId = NULL)
  {
    if(!parent::hasAccess()) {
      return false;
    }
    if(!$this->isRechtAllowed('334.1.5')) {
      return false;
    }
    if(!\DBWorkBASysSettings::isMVHS()) {
      return false;
    }
    if(!VertraegeUtils::vertragsDruckAllowed($this->request->knr)) {
      return false;
    }
    return true;
  }
  
  public function action()
  {
    $file = $this->getDokumentPerDMZ();
    if($file) {
      $this->merkeDruckdatum();
    }
    return $this->getResponse($file);
  }
  
  protected function getResponse($file)
  {
    $this->handleResponseStrategies();
    $this->response->file = $file;
    $this->response->success = ($file ? true : false);
    $this->response->errorMessage = 'Die angeforderte Datei wurde nicht gefunden.';
    $this->response->knr = $this->request->knr;
    return $this->response;
  }
  
  private function getDokumentPerDMZ()
  {
    $user = $this->getUser();
    try {
      return \DatDocAPI::getKursVertragFromDmz($user->dnr, $this->request->knr);
    } catch(\Exception $e) {
      return null;
    }
  }
  
  private function merkeDruckdatum()
  {
    try {
      $dozKurs = VertraegeUtils::getDozVertragFromDmz($this->request->knr);
      if(!\DateTimeOperations::isValidDate($dozKurs->druckdat)
        || $dozKurs->druckdat == DEFAULTDATE) {
        \DozKursAPI::merkeVertragsDruck($dozKurs);
      }
    } catch(\Exception $e) {
       
      return false;
    }
    return true;
  }
  
  protected function getResponseStrategies()
  {
    return array(
        new \Kufer\KuferTools\Utils\ResponseStrategies\ResponseMenuBar($this),
        new \Kufer\KuferTools\Utils\ResponseStrategies\ResponseUser($this)
    );
  }
}

class VertragDruckenRequest
{
  public $knr;
}

class VertragDruckenResponse extends \Kufer\KuferTools\Basis\UseCase\ToolResponse
{
  public $file;
  public $success;
  public $menuPunkte;
  public $user;
  public $errorMessage;
}