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

namespace Kufer\Web\KuferTools\Dozent\HonorarAbnahme\HandleHonorarAbnahme\HonorarAbnahmeAblehnen;

use Kufer\Web\KuferTools\Dozent\HonorarAbnahme\HandleHonorarAbnahme\HandleHonorarAbnahmeController;

class HonorarAbnahmeAblehnenController extends \Kufer\Web\KuferTools\Basis\Controller\AjaxNoContainerToolController
{
  protected function getUseCase(): \Kufer\Web\KuferTools\Basis\UseCase\UseCase
  {
    return new HonorarAbnahmeAblehnenUseCase(
      $this->getRequestObj()
    );
  }

  protected function getRequestObj()
  {
    $result = new HonorarAbnahmeAblehnenRequest();
    $result->id = \GetOperations::getVarValue('id');
    $result->uploadFiles = array_filter(array_map(static function($i) {
      return $_FILES['anhang' . $i] ?? null;
    }, range(1, 4)), static function(?array $file) {
      return !is_null($file) && isset($file['size'], $file['tmp_name'], $file['type'], $file['name']) && $file['size'] > 0;
    });
    $result->remark = \PostOperations::getVarValue('hinweise_reklamieren_honorarabnahme');

    $ids = \PostOperations::getVarValue('honorarabnahme_ids', array());
    if (!is_array($ids)) {
      $ids = array();
    }
    $ids = array_values(array_map(function($id) { return (int)$id; }, array_filter($ids, function($id) {
      return \CleanOperations::isNatural($id);
    })));

    $details = array();
    foreach ($ids as $id) {
      $art = \PostOperations::getVarValue('honorarabnahme_art_' . $id);
      if ($art === 'H') {
        $proue = \PostOperations::getVarValue('honorarabnahme_pro_ue_' . $id);
        $faktor = \PostOperations::getVarValue('honorarabnahme_faktor_' . $id);
        if (!\CleanOperations::isFloatMitKomma($proue)
          || !\CleanOperations::isFloatMitKomma($faktor)) {
          continue;
        }

        $details[$id] = array(
          'id' => $id,
          'art' => $art,
          'proue' => \MathOperations::stringToFloat($proue),
          'faktor' => \MathOperations::stringToFloat($faktor)
        );
      } elseif ($art === 'F') {
        $prokm = \PostOperations::getVarValue('honorarabnahme_pro_km_' . $id);
        $entfernung = \PostOperations::getVarValue('honorarabnahme_entfernung_' . $id);
        $faktor = \PostOperations::getVarValue('honorarabnahme_faktor_' . $id);
        $doppelt = \PostOperations::isDefined('honorarabnahme_doppelt_' . $id);
        if (!\CleanOperations::isFloatMitKomma($prokm)
            || !\CleanOperations::isNatural($entfernung)
            || !\CleanOperations::isFloatMitKomma($faktor)) {
          continue;
        }

        $details[$id] = array(
          'id' => $id,
          'art' => $art,
          'prokm' => \MathOperations::stringToFloat($prokm),
          'entfernung' => (int)$entfernung,
          'faktor' => \MathOperations::stringToFloat($faktor),
          'doppelt' => $doppelt
        );
      }
    }

    $result->honorarDetails = $details;

    return $this->handleXsrf($result, $this->getActionVal(), $result->id);
  }

  protected function getPresenter($pUseCaseResponse)
  {
    return new HonorarAbnahmeAblehnenPresenter($pUseCaseResponse);
  }
}