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


namespace Kufer\KuferTools\Basis\TeilnehmerInfo\NewTeilnehmer\HandleTeilnehmerInsert;

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

  protected function getTeilnehmerInserter()
  {
    return new \Kufer\KuferTools\Utils\TeilnehmerHandler\TeilnehmerBeziehungInserter();
  }

  protected function transformColumnValues($actualColumnValues)
  {
    
    if (!isset($actualColumnValues['teilnehmer']['dse_unterschrieben_weg'])) {
      
      $actualColumnValues['teilnehmer']['dse_unterschrieben_weg'] = '';
    }

    if ($actualColumnValues['teilnehmer']['dse_unterschrieben_weg'] === '') {
      $dbwhl = new \DBWorkHLGrundSys();
      $dseAutoSetzenHl = $dbwhl->getFeldWert('DS_Automatisch_Setzen_TN_Neuanlage', 'F');
      
      
      if ($dseAutoSetzenHl == 'W' && isset($actualColumnValues['teilnehmer']['dse_unterschrieben_datum'])
              && $actualColumnValues['teilnehmer']['dse_unterschrieben_datum'] != '') {
        $dseTnNeuanlageWeg = $dbwhl->getFeldWert('DS_Automatisch_Setzen_TN_Neuanlage_Weg', '');
        $actualColumnValues['teilnehmer']['dse_unterschrieben_weg'] = $dseTnNeuanlageWeg;
      }
    }

    return $actualColumnValues;
  }

  public function insertTeilnehmer()
  {
    $tnInserter = $this->getTeilnehmerInserter();

    $actualColumnValues = $this->transformColumnValues($this->request->columnValues);

    list($statusCode, $tnr, $wrongFields) = array_values($tnInserter->handleTeilnehmerInsert($this->request->wssHandler, $actualColumnValues));
    \SessionOperations::setVarValueWTIntern('newTnStatusCode', $statusCode);
    \SessionOperations::setVarValueWTIntern('newTnWrongFields', $wrongFields);

    return $tnr;
  }

  public function action()
  {
    $tnr = $this->insertTeilnehmer();

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

  protected function getResponse($pTnr)
  {
    $this->response->tnr = $pTnr;

    return $this->response;
  }
}

class HandleTeilnehmerInsertRequest
{
  public $columnValues;
  public $wssHandler;
}

class HandleTeilnehmerInsertResponse extends \Kufer\KuferTools\Basis\UseCase\ToolResponse
{
  public $tnr;
}