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

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

use Kufer\Web\KuferTools\Basis\UseCaseBuilder\SpecificToolSection;
use Kufer\Web\KuferTools\Basis\UseCaseBuilder\ToolSection;

abstract class QualifikationenUseCase extends \Kufer\Web\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()
  {
    $this->handleResponseStrategies();

    $teilnehmer = $this->getTeilnehmer();
    $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(\ToolSettings $toolSettings, ?int $pToolSectionId = null): array
  {
    $user = static::getUser();
    $toolSectionId = isset($pToolSectionId) ? $pToolSectionId : static::getToolSectionId();
    if (!$user->isEmpty()) {
      $wssInFiles = new \Kufer\Web\KuferTools\Utils\WssInFiles();

      return $wssInFiles->getWss(
        new SpecificToolSection(static::getToolId(), $toolSectionId ?? static::getToolSectionId()),
        $toolSettings,
        $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->toolSettings, $this->getAusbildungToolSectionId());
    $this->response->werdegangColumns = $this->getColumns($this->toolSettings, $this->getWerdegangToolSectionId());
    $this->response->teilnehmer = $teilnehmer;
    $this->response->ausbildungen = $ausbildungen;
    $this->response->werdegaenge = $werdegaenge;

    return $this->response;
  }

  protected function getResponseStrategies()
  {
    return array(new \Kufer\Web\KuferTools\Utils\ResponseStrategies\ResponseWithToolSettings($this));
  }
}

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

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

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

  public $ausbildungColumns;
  public $werdegangColumns;

  
}