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

namespace Kufer\KuferTools\Firma\MitarbeiterUebersicht\MitarbeiterDokumente\Download;

class MitarbeiterDokumenteDownloadUseCase extends \Kufer\KuferTools\Basis\UseCase\ToolUseCase
{
  public function __construct($request)
  {
    parent::__construct($request, new MitarbeiterDokumenteDownloadResponse());
  }

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

    if (!\SessionOperations::isDmzBetrieb()) {
      return false;
    }

    $firmenMas = new \Kufer\KuferTools\Utils\Firma\FirmenMitarbeiter($this->toolSettings, $this->getUser());
    if (!\in_array($this->request->tnr, $firmenMas->getMitarbeiterIds())) {
      return false;
    }

    $documents = \Kufer\KuferTools\Firma\MitarbeiterUebersicht\MitarbeiterDokumente\MitarbeiterDokumenteUebersichtUseCase::getDokumentenListe($this->request->tnr);
    $documentsLfdnrs = \ArrayOperations::mapAttribut($documents, 'lfdnr');
    if (!\in_array($this->request->lfdnr, $documentsLfdnrs)) {
      return false;
    }

    return true;
  }

  public static function getToolSectionId()
  {
    return 747;
  }

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

  public function action()
  {
    if (!$this->request->isXsrfOk && !$this->request->isRefresh) {
      return $this->getEmptyResponse();
    }

    $datDoc = $this->getDatDocObject();
    $file = $this->getDokumentPerDMZ($datDoc);

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

  private function getEmptyResponse()
  {
    $this->response->file = false;
    $this->response->success = false;
    $this->response->statusMessageContainer = null;

    return $this->response;
  }

  private function getDatDocObject()
  {
    $datDoc = new \Dat_doc();
    $datDoc->lfdnr = $this->request->lfdnr;
    $datDoc->nr = $this->request->tnr;
    
    $datDoc->freigabe_firma_tools = true;

    return $datDoc;
  }

  
  protected function getResponse($file)
  {
    $this->handleResponseStrategies();
    $this->response->file = $file;
    $this->response->success = !is_null($file);
    $this->response->statusMessageContainer = $this->createStatusMessageContainer($this->response->success);

    return $this->response;
  }

  private function createStatusMessageContainer($success)
  {
    if ($success) {
      $statusMessage = \Kufer\KuferTools\Utils\StatusMessages\StatusMessage::getSuccessMessageObj('Erfolg');
    } else {
      $statusMessage = \Kufer\KuferTools\Utils\StatusMessages\StatusMessage::getErrorMessageObj('Die angeforderte Datei wurde nicht gefunden.');
    }
    $statusMessageContainer = new \Kufer\KuferTools\Utils\StatusMessages\StatusMessageContainer();
    $statusMessageContainer->addStatusMessageObj($statusMessage);

    return $statusMessageContainer;
  }

  
  private function getDokumentPerDMZ($datDoc)
  {
    try {
      return \DatDocAPI::getDokumentFromDmz($datDoc);
    } catch (\Exception $e) {
      \Logger::logg('Fehler beim Dokumentendownload: ' . $e->getMessage(), 251);

      return null;
    }
  }

  protected function getResponseStrategies()
  {
    return array(
        new \Kufer\KuferTools\Utils\ResponseStrategies\ResponseMenuBar($this),
        new \Kufer\KuferTools\Utils\ResponseStrategies\ResponseUser($this)
    );
  }
}

class MitarbeiterDokumenteDownloadRequest
{
  public $tnr;
  public $tguid;
  public $lfdnr;
}

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