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

namespace Kufer\Web\KuferTools\Utils\Dozent;

class KursBearbeitenPlanungUtils
{
  private function __construct()
  {
  }

  public static function getSettingStatus(string $status): array
  {
    if ($status === '') { 
      return array();
    }

    $result = array_map(static function(string $str) {
      switch ($str) {
        case '-': return ' '; 
        default: return $str;
      }
    }, explode(',', $status));

    if (in_array(' ', $result, true)) { 
      $result[] = '';
    }

    return $result;
  }

  private static function checkStatus(\Kurs $kurs, array $status, bool $default = true): bool
  {
    if (empty($status)) {
      return $default;
    }

    if (in_array('AUSFALL', $status, true) && $kurs->isAusfall()) {
      return true;
    }

    return in_array($kurs->abschluss, $status, true);
  }

  
  public static function isKursInPlanung(string $kursstatusPlanungSetting, \Kurs $kurs): bool
  {
    $status = static::getSettingStatus($kursstatusPlanungSetting);

    return static::checkStatus($kurs, $status, false) && !$kurs->isAusfall();
  }

  
  public static function isKursBearbeitbar(
    string $kursstatusBearbeitbarSetting,
    string $kursstatusNichtBearbeitbarSetting,
    string $kursstatusPlanungSetting,
    \Kurs $kurs
  ): bool {
    if ($kursstatusBearbeitbarSetting === ''
        && $kursstatusNichtBearbeitbarSetting === ''
        && $kursstatusPlanungSetting === '') {
      return true;
    }

    $status = static::getSettingStatus($kursstatusBearbeitbarSetting);
    $nichtStatus = static::getSettingStatus($kursstatusNichtBearbeitbarSetting);
    $nichtStatusPlanung = static::getSettingStatus($kursstatusPlanungSetting);

    return static::checkStatus($kurs, $status)
      && !static::checkStatus($kurs, $nichtStatus, false)
      && !static::checkStatus($kurs, $nichtStatusPlanung, false);
  }

  
  public static function isTerminBearbeitbar(
    string $kursstatusBearbeitbarSetting,
    string $kursstatusNichtBearbeitbarSetting,
    string $kursstatusPlanungSetting,
    \Kurs $kurs
  ): bool {
    return static::isKursBearbeitbar(
      $kursstatusBearbeitbarSetting,
      $kursstatusNichtBearbeitbarSetting,
      $kursstatusPlanungSetting,
      $kurs
    ) || static::isKursInPlanung($kursstatusPlanungSetting, $kurs);
  }
}