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

namespace Kufer\Web\KuferTools\Teilnehmer\ZsaAnmeldung\BelegungsUebersicht;


class SaveBelegungenUseCase extends \Kufer\Web\KuferTools\Basis\UseCase\ToolUseCase
{
  public $dbwBelegung;
  private $belegungHandler;

  public function __construct($request)
  {
    parent::__construct($request, new SaveBelegungenResponse());
    
    $this->dbwBelegung = new \DBWorkBelegung(1, true);
    $user = $this->getUser();
    $this->belegungHandler = new \Kufer\Web\KuferTools\Utils\BelegungHandler\Belegungen4Bildungsverantwortlichen($user->tnr);
  }

  public static function getToolSectionId()
  {
    return 531;
  }

  public static function getToolId()
  {
    return 43;
  }

  public function action()
  {
    $belegungen = $this->getBearbeitbareBelegungen();
    $geaenderteBelegungen = $this->aktualisiereBelegungenAnhandRequest($belegungen);
    $this->response->success = $this->speicherBelegungen($geaenderteBelegungen, $belegungen);

    return $this->response;
  }

  
  protected function getBearbeitbareBelegungen()
  {
    $this->belegungHandler->setFilterStatus('I');
    $belegungen = $this->belegungHandler->getAlleDatamodule();

    return \ArrayOperations::setAttributAsKey($belegungen, 'id');
  }

  private function aktualisiereBelegungenAnhandRequest($belegungen)
  {
    $geaenderteBelegungen = array();
    foreach ($belegungen as $belegung) {
      if (isset($this->request->bemerkungen[$belegung->id]) && $this->request->bemerkungen[$belegung->id] != $belegung->bemerkung) {
        $geaenderteBelegungen[$belegung->id] = clone($belegung);
        $geaenderteBelegungen[$belegung->id]->bemerkung = $this->request->bemerkungen[$belegung->id];
      }
      if (isset($this->request->genehmigungen[$belegung->id]) && ($this->request->genehmigungen[$belegung->id] == 'ja' || $this->request->genehmigungen[$belegung->id] == 'nein')) {
        if (!isset($geaenderteBelegungen[$belegung->id])) {
          $geaenderteBelegungen[$belegung->id] = clone($belegung);
        }
        if ($this->request->genehmigungen[$belegung->id] == 'ja') {
          $geaenderteBelegungen[$belegung->id]->status = 'K';
        } elseif ($this->request->genehmigungen[$belegung->id] == 'nein') {
          $geaenderteBelegungen[$belegung->id]->status = 'L';
        }
      }
      if (isset($this->request->prioritaeten[$belegung->id]) && ($this->request->prioritaeten[$belegung->id] != $belegung->prioanm)) {
        if (!isset($geaenderteBelegungen[$belegung->id])) {
          $geaenderteBelegungen[$belegung->id] = clone($belegung);
        }
        $geaenderteBelegungen[$belegung->id]->prioanm = $this->request->prioritaeten[$belegung->id];
      }
    }

    return $geaenderteBelegungen;
  }

  private function speicherBelegungen($belegungen, $origBelegungen)
  {
    if (count($belegungen) > 0) {
      $success = true;
      foreach ($belegungen as $key => $belegung) {
        if (!\BelegungAPI::updateBelegung($belegung, $origBelegungen[$key])) {
          $success = false;
        }
      }

      return $success;
    } else {
      return true;
    }
  }
}

class SaveBelegungenRequest extends \Kufer\Web\KuferTools\Basis\Uebersicht\UebersichtRequest
{
  public $bemerkungen;
  public $genehmigungen;
  public $prioritaeten;
}

class SaveBelegungenResponse extends \Kufer\Web\KuferTools\Basis\Uebersicht\UebersichtRequest
{
  public $success;
}