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

namespace Kufer\KuferTools\Teilnehmer\ZsaTeilnehmerUebersicht\BelegungDetails;

class BelegungDetailsUseCase extends \Kufer\KuferTools\Basis\UseCase\ToolUseCase
{
  
  private $dbwBelegung;
  private $belegungHandler;

  public function __construct($request)
  {
    parent::__construct($request, new BelegungDetailsResponse());
    $this->dbwBelegung = new \DBWorkBelegung(1, true);
    $user = $this->getUser();
    $this->belegungHandler = new \Kufer\KuferTools\Utils\BelegungHandler\Belegungen4Bildungsverantwortlichen($user->tnr);
  }

  public static function getToolSectionId()
  {
    return 530;
  }

  public static function getToolId()
  {
    return 42;
  }

  public function action()
  {
    $belegung = $this->getBelegung();
    $vergebenePrioritaeten = $this->vergebenePrioritaeten($belegung);

    return $this->getResponse($belegung, $vergebenePrioritaeten);
  }

  private function getBelegung()
  {
    return $this->dbwBelegung->getBelegung($this->request->bid);
  }

  public function hasAccess($pToolsectionId = null)
  {
    if (!\Kufer\KuferTools\Basis\UseCase\ToolUseCase::hasAccess($pToolsectionId)) {
      return false;
    }

    
    if (!$this->isRechtAllowed('530.0.1') || $this->isRechtAllowed('531.0.2')) {
      return false;
    }

    $alleIds = $this->getAllIds();
    if (!in_array($this->request->bid, $alleIds)) {
      return false;
    }

    return true;
  }

  protected function getAllIds()
  {
    
    $belegung = $this->getBelegung();
    $this->belegungHandler->setFilterTnr($belegung->tnr);
    $this->belegungHandler->setFilterStatus('I');

    return $this->belegungHandler->getAlleIds();
  }

  
  private function vergebenePrioritaeten($belegung)
  {
    if ($belegung->kurs->kurse2->priobeleg) {
      $genehmigteBelegungen = $this->getGenehmigteBelegungen($belegung);

      
      return \ArrayOperations::mapAttribut($genehmigteBelegungen, 'prioanm');
    }

    return array();
  }

  private function getGenehmigteBelegungen($belegung)
  {
    $user = $this->getUser();
    
    $belegungHandler = new \Kufer\KuferTools\Utils\BelegungHandler\Belegungen4Bildungsverantwortlichen($user->tnr);
    $belegungHandler->setFilterStatus('K');
    $belegungHandler->setFilterKnr($belegung->knr);

    return $belegungHandler->getAlleDatamodule();
  }

  protected function getResponse($belegung, $vergebenePrioritaeten)
  {
    $this->response->belegung = $belegung;
    $this->response->vergebenePrioritaeten = $vergebenePrioritaeten;

    return $this->response;
  }
}

class BelegungDetailsRequest
{
  public $bid;
}

class BelegungDetailsResponse extends \Kufer\KuferTools\Basis\UseCase\ToolResponse
{
  public $belegung;
  public $vergebenePrioritaeten = array();
}