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

namespace Kufer\Web\KuferTools\Teilnehmer\KursUebersicht\Detailsreiter\Dokumente\DokumenteUpload;

use Kufer\Web\Classes\Mail\Sender\Settings\RecipientEinrichtung\IEMailEinrichtungRecipientSettings;

class DokumenteUploadUseCase extends \Kufer\Web\KuferTools\Basis\Kursdetails\Detailsreiter\Dokumente\DokumenteUpload\DokumenteUploadUseCase
{
  public static function getToolId()
  {
    return \ToolsAPI::TOOL_TN;
  }

  public static function getToolSectionId()
  {
    return 764;
  }

  public function hasAccess($pToolSectionId = null)
  {
    if (!parent::hasAccess()) {
      return false;
    }
    if (!$this->isRechtAllowed('335.1.10')) {
      return false;
    }
    if (!$this->isRechtAllowed($this->getToolSectionId() . '.0.1')) {
      return false;
    }

    return true;
  }

  protected function getCustomEinrichtungEMail(): string
  {
    return $this->toolSettings->dokumenteUploadInfoMailEinrichtung;
  }

  protected function createInfoMailView(\Kufer\Web\KuferTools\Basis\Kursdetails\Detailsreiter\Dokumente\DokumenteUpload\InfoMailAnEinrichtungViewModel $viewModel): \Kufer\Web\KuferTools\Basis\Kursdetails\Detailsreiter\Dokumente\DokumenteUpload\InfoMailAnEinrichtungView
  {
    return new InfoMailAnEinrichtungView($viewModel);
  }

  protected function getDatDocAry()
  {
    $datDocAry = parent::getDatDocAry();

    return array_map(function(\Dat_doc $datDoc) {
      $user = $this->getUser();
      $datDoc->info = 'Von der Teilnehmer ' . $user->getVarValue('name_vorname_ohne_komma') . ' zum Kurs ' . $this->getKurs($this->getKursId())->nr_anzeige;
      $datDoc->freigabe_tn_tools = true;

      return $datDoc;
    }, $datDocAry);
  }

  protected function getAllowedIds()
  {
    $user = $this->getUser();
    $belegungshelper = new \Kufer\Web\KuferTools\Utils\DatamodulHelper\Belegungen\TeilnehmerBelegungen($this->toolSettings, $user->getTnrIdentifier());

    return $belegungshelper->getIdsOhneFilter();
  }

  protected function getRequestedId()
  {
    return $this->request->belegId;
  }

  public function getKursFromBelegungsId($belId)
  {
    $dbwBelegung = new \DBWorkBelegung();
    $belegung = $dbwBelegung->getBelegung($belId);

    return parent::getKurs($belegung->knr);
  }

  protected function getKursId(): string
  {
    return $this->getKursFromBelegungsId($this->getRequestedId())->id;
  }

  protected function sendEMail(\Kufer\Mail\EMail\IEMail $email, IEMailEinrichtungRecipientSettings $recipientSettings): \Kufer\Mail\Sender\Result\EMailSentResult
  {
    $aktTn = \SessionOperations::getCurrentWebToolsTeilnehmer();
    $emailSender = \Kufer\Mail\Sender\EMailSenderFactory::create();

    return $emailSender->sendFromTeilnehmerToEinrichtung($email, $aktTn, $recipientSettings);
  }

  protected function getDbTypAndId(): array
  {
    return array('T', $this->getUser()->getTnrIdentifier());
  }
}

class DokumenteUploadRequest extends \Kufer\Web\KuferTools\Basis\Kursdetails\Detailsreiter\Dokumente\DokumenteUpload\DokumenteUploadRequest
{
  public $belegId;
}