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

namespace Kufer\KuferTools\Basis\TeilnehmerInfo\Detailsreiter\Qualifikationen;

abstract class QualifikationenUseCase extends \Kufer\KuferTools\Basis\UseCase\EinzelTeilnehmerUseCase
{
  public function __construct($request)
  {
    parent::__construct($request, new QualifikationenResponse());
  }

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

    return true;
  }

  public function action()
  {
    $teilnehmer = $this->getTeilnehm($this->getRequestedIdentifier());
    $ausbildungen = $this->getAusbildungen();
    $werdegaenge = $this->getWerdegaenge();

    return $this->getResponse($teilnehmer, $ausbildungen, $werdegaenge);
  }

  private function getWerdegaenge()
  {
    
    $dummyDbwTnWerdegang = new \DBWorkTNWerdegang(1, true);
    $emptyWerdegang = $dummyDbwTnWerdegang->getNewObject();

    $dbwTnWerdegang = new \DBWorkTNWerdegang();
    $werdegaenge = (array)$dbwTnWerdegang->getWerdegangByTNr($this->request->tnr);

    return \array_merge(array($emptyWerdegang), $werdegaenge);
  }

  private function getAusbildungen()
  {
    
    $dummyDbwTnAusbildung = new \DBWorkTNAusbildung(1, true);
    $emptyAusbildung = $dummyDbwTnAusbildung->getNewObject();
    $dbwTnAusbildung = new \DBWorkTNAusbildung();
    $ausbildungen = (array)$dbwTnAusbildung->getAusbildungByTNr($this->request->tnr);

    return \array_merge(array($emptyAusbildung), $ausbildungen);
  }

  public static function getColumns(?int $pToolSectionId = null): array
  {
    $user = static::getUser();
    $toolSectionId = isset($pToolSectionId) ? $pToolSectionId : static::getToolSectionId();
    if (!$user->isEmpty()) {
      $wssInFiles = new \Kufer\KuferTools\Utils\WssInFiles();

      return $wssInFiles->getWss($toolSectionId, $user);
    } else {
      return array();
    }
  }

  
  abstract protected function getAusbildungToolSectionId();

  
  abstract protected function getWerdegangToolSectionId();

  protected function getResponse($teilnehmer, $ausbildungen, $werdegaenge)
  {
    $this->response->ausbildungColumns = $this->getColumns($this->getAusbildungToolSectionId());
    $this->response->werdegangColumns = $this->getColumns($this->getWerdegangToolSectionId());
    $this->response->teilnehmer = $teilnehmer;
    $this->response->ausbildungen = $ausbildungen;
    $this->response->werdegaenge = $werdegaenge;

    return $this->response;
  }
}

class QualifikationenRequest
{
  public $tnr;
  public $tguid;
  public $datumVon;
  public $datumBis;
  public $kursTitel;
  public $knrVon;
  public $knrBis;
  public $changedBelegungen;
}

class QualifikationenResponse extends \Kufer\KuferTools\Basis\UseCase\ToolResponse
{
  public $kurs;
  public $termine;
  public $columns;

  public $ausbildungen = array();
  public $werdegaenge = array();

  
}