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

namespace Kufer\KuferTools\Utils\DatamodulHelper\KursTageHelper;

class DozentenKurstage extends KursTageHelper
{
  protected function getKurstageIds($dbwKurseTage)
  {
    return $dbwKurseTage->getKurstageIds();
  }

  public function getDatamoduleByIds($pIds)
  {
    
    static $kurstage = array();
    $key = implode(',', $pIds);
    if (!isset($kurstage[$key])) {
      $dbwKurseTage = $this->getDBWork();
      $kurstageAry = $dbwKurseTage->getKurseTageByIds($pIds);
      $kurstageAry = self::erweitereKurstageUmRechnungsstatus($kurstageAry, $this->user);
      $kurstage[$key] = $kurstageAry;
    }

    return $kurstage[$key];
  }

  public static function erweitereKurstageUmRechnungsstatus($kurstage, $user)
  {
    if (\DBWorkBASysSettings::isMVHS()) {
      try {
        $eigeneKurstage = \array_filter($kurstage, function($kurstag) use ($user) {
          return $kurstag->dnr == $user->dnr;
        });
        $ktIds = \ArrayOperations::mapAttribut($eigeneKurstage, 'id');
        $ktStatusMap = self::getRechnungsStatus($ktIds);
        foreach ($kurstage as $kurstag) {
          if (isset($ktStatusMap[$kurstag->id])) {
            $kurstag->rechnungStatus = $ktStatusMap[$kurstag->id];
          }
        }
      } catch (\Exception $e) {
        \Logger::logg('ABGLEICH_GET_KURSTAGE_RECHNUNGSSTATUS: Fehler beim Ermitteln des Status: ' . $e->getMessage(), 200);
      }
    }

    return $kurstage;
  }

  
  private static function getRechnungsStatus($ktIds)
  {
    if (empty($ktIds)) {
      return array();
    }

    $root = new \XMLNode('kurstage');
    foreach ($ktIds as $ktId) {
      $ktNode = new \XMLNode('kurstag');
      $ktNode->addChild(new \XMLNode('id', $ktId));
      $root->addChild($ktNode);
    }
    $abgleichApi = new \AbgleichAPI();
    $result = $abgleichApi->sendeNachricht(
      \AbgleichAPI::ABGLEICH_GET_KURSTAGE_RECHNUNGSSTATUS,
      new \Nutzlast($root)
    );

    
    $ktStatusArray = \JsonOperations::getFromString($result->reason);

    $ktStatusMap = array();
    foreach ($ktStatusArray as $ktStatus) {
      $ktStatusMap[$ktStatus->Key] = $ktStatus->Value;
    }

    return $ktStatusMap;
  }

  protected function setzeEinstellungen($dbwKurseTage)
  {
    $dbwKurseTage = parent::setzeEinstellungen($dbwKurseTage);
    $dbwKurseTage->toobject->nodoztool = true;

    return $dbwKurseTage;
  }
}