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


namespace Kufer\KuferTools\Ausgaben\CommonTasks;

use Kufer\Web\Classes\Addfunctions\Guid;
use Kufer\Web\Classes\Identifier\Identifier;

class SendPrepare
{
  
  public function getBelegungen($pKnr, array $pBelegIds, $pTnStatus)
  {
    $dbwBelegung = new \DBWorkBelegung(1, true);
    $dbwBelegung->newSearch();
    $dbwBelegung->fromobject->status = $pTnStatus;
    $belegungen = $dbwBelegung->getBelegungenbyKursNR($pKnr);

    
    $result = array();
    if (count($pBelegIds) > 0) {
      foreach ($belegungen as $belegung) {
        if (in_array($belegung->id, $pBelegIds)) {
          $result[] = $belegung;
        }
      }
    } else {
      $result = $belegungen;
    }

    return $result;
  }

  
  public function getBelegungenIds($pKnr, array $pBelegIds, $pTnStatus)
  {
    $dbwBelegung = new \DBWorkBelegung(1, true);
    $dbwBelegung->newSearch();
    $dbwBelegung->fromobject->status = $pTnStatus;
    $belegungen = $dbwBelegung->getBelegungenIdsbyKursNR($pKnr);

    
    $result = array();
    if (count($pBelegIds) > 0) {
      foreach ($belegungen as $belegung) {
        if (in_array($belegung, $pBelegIds)) {
          $result[] = $belegung;
        }
      }
    } else {
      $result = $belegungen;
    }

    return $result;
  }

  
  public function getDozenten($pKnr, array $pDozIds)
  {
    
    $dbwKurse = new \DBWorkKurseWT();
    $dozentenTmp = $dbwKurse->getDozentenForKurse(array($pKnr));
    
    $dozenten = array();
    
    array_walk_recursive($dozentenTmp, function($dozentObj) use (&$dozenten) { $dozenten[] = $dozentObj; });
    $dozIdsToCacheKeys = array_map(static function(Identifier $id) {
      return $id->getCacheKey();
    }, $pDozIds);

    $result = array();
    
    if (count($pDozIds) > 0) {
      foreach ($dozenten as $dozent) {
        if (in_array($dozent->getIdentifier()->getCacheKey(), $dozIdsToCacheKeys)) {
          $result[] = $dozent;
        }
      }
    } else {
      $result = $dozenten;
    }

    return $result;
  }

  
  public function getIdsFromRequest(array $requestIds): array
  {
    return array_map(static function($requestedId) {
      $ids = explode(':', (string)$requestedId, 2);
      if (count($ids) === 1) {
        return Identifier::fromId($ids[0]);
      } else {
        return new Identifier($ids[0], new Guid($ids[1]));
      }
    }, $requestIds);
  }
}