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

namespace Kufer\KuferTools\Basis\Kursdetails\DetailsReiter\Termine\TermineLoeschen;

use Kufer\KuferTools\Utils\EmailVorbelegen;

abstract class TermineLoeschenUseCase extends \Kufer\KuferTools\Basis\UseCase\KurstageUseCase
{
  public const SUCCESS_TERMINE_GELOESCHT = 1;
  public const ERROR_TERMINE_ANZAHL_NULL = 2;
  public const ERROR_TERMINE_UEBERTRAGUNG = 3;
  public const SENT_ERROR = 4;

  public function __construct($request, $response = null)
  {
    parent::__construct($request, $response ?? new TermineLoeschenResponse());
  }

  public function action()
  {
    $eintraegeGeloescht = false;

    $statusCode = $this->handleTermineDelete($this->request->ktIds);
    if ($statusCode == self::SUCCESS_TERMINE_GELOESCHT) {
      $eintraegeGeloescht = true;
    }

    return $this->getResponse($this->request->knr, $statusCode, $eintraegeGeloescht);
  }

  
  private function handleTermineDelete($zuLoeschendeTerminIDs)
  {
    $dbwKT = new \DBWorkKurseTage();

    $loeschbareTermineIDs = $dbwKT->getKurstageCountFromIDs($zuLoeschendeTerminIDs);
    $anzahlLoeschbareTermine = count($loeschbareTermineIDs);

    if ($anzahlLoeschbareTermine == 0) {
      return self::ERROR_TERMINE_ANZAHL_NULL;
    }

    $apiStatus = '';

    try {
      if (\SessionOperations::isReplikat()) {
        $korrekturAPI = new \KurskorrekturAPI();
        $correctFields = array();
        $correctFields[] = 'knr';
        $kurstagPaarAry = array();

        $kurstage = $dbwKT->getKurstageByIds($loeschbareTermineIDs);

        foreach ($loeschbareTermineIDs as $terminID) {
          $kurstag = $dbwKT->getKurstag($terminID);
          $kurstagPaarAry[] = new \Tuple($kurstag, $correctFields, $kurstag);
        }

        $apiStatus = $korrekturAPI->correctKurstage($kurstagPaarAry, 'delete');
      }

      if ($apiStatus === 'nichtAktiviert') {
        throw new \Exception('Die DMZ ist nicht aktiviert');
      }

      foreach ($loeschbareTermineIDs as $terminID) {
        $dbwKT->deleteKurstag($terminID);
      }

      $statusCode = self::SUCCESS_TERMINE_GELOESCHT;
      EmailVorbelegen\EmailVorbelegenKurstage::setSessionVars($kurstage ?? array());
    } catch (\Exception $e) {
      \Logger::logg('Löschen von Kurstagen - folgende Exception ist aufgetreten: ' . $e->getMessage() . ' [' . $e->getTraceAsString() . ']', 200);
      $statusCode = self::ERROR_TERMINE_UEBERTRAGUNG;
    }

    return $statusCode;
  }

  protected function getResponse($pKnr, $pStatusCode, $pEintraegeGeloescht)
  {
    $this->response->knr = $pKnr;
    $this->response->statusCode = $pStatusCode;
    $this->response->eintraegeGeloescht = $pEintraegeGeloescht;

    return $this->response;
  }
}

class TermineLoeschenRequest
{
  public $knr;
  public $ktIds;
}

class TermineLoeschenResponse extends \Kufer\KuferTools\Basis\UseCase\ToolResponse
{
  public $knr;
  public $statusCode;
  public $eintraegeGeloescht;
}