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

namespace Kufer\Web\Classes\mail\sender\settings\recipienteinrichtung;

class EMailEinrichtungRecipientToolsKursDozentSettings extends EMailEinrichtungRecipientToolsKursSettings
{
  public const RECIPIENT_PLANENDER_MITARBEITER_DOZENT = 'planenden MitarbeiterIn des Dozenten';
  public const RECIPIENT_VERWALTENDER_MITARBEITER_DOZENT = 'verwaltenden MitarbeiterIn des Dozenten';

  
  protected $sendToVerwaltendenMitarbeiterDozent = false;

  
  protected $sendToPlanendenMitarbeiterDozent = false;

  
  protected $dozent;

  public function __construct(\Kurs $kurs, \Dozent $dozent)
  {
    parent::__construct($kurs);

    $this->dozent = $dozent;
  }

  public function setSettingMailToPlanendenMitarbeiterDozent(?bool $sendToPlanendenMitarbeiter): self
  {
    $this->sendToPlanendenMitarbeiterDozent = $sendToPlanendenMitarbeiter;

    return $this;
  }

  public function setSettingMailToVerwaltendenMitarbeiterDozent(?bool $sendToVerwaltendenMitarbeiter): self
  {
    $this->sendToVerwaltendenMitarbeiterDozent = $sendToVerwaltendenMitarbeiter;

    return $this;
  }

  protected function getPlanendenMitarbeiterDozent(): ?\BASysBenutzer
  {
    return $this->dozent->getPlanenderMitarbeiter();
  }

  protected function getVerwaltendenMitarbeiterDozent(): ?\BASysBenutzer
  {
    return $this->dozent->getVerwaltenderMitarbeiter();
  }

  public function shouldSendToEinrichtung(): bool
  {
    $result = parent::shouldSendToEinrichtung();
    if ($result === false) {
      return false;
    }

    if ($this->sendToEinrichtung === true) {
      return true;
    }

    if (!$this->sendToPlanendenMitarbeiterDozent && !$this->sendToVerwaltendenMitarbeiterDozent) {
      return true;
    }

    $valid = \ValidierungWB::getInstance();

    $maPlanend = $this->getPlanendenMitarbeiterDozent();
    if (!is_null($maPlanend) && $this->sendToPlanendenMitarbeiterDozent) {
      $maPlanendEMailSet = $maPlanend->email != '' && $valid->isValidVar('email', $maPlanend->email);
      if ($maPlanendEMailSet) {
        return false;
      }
    }

    $maVerwaltend = $this->getVerwaltendenMitarbeiterDozent();
    if (!is_null($maVerwaltend) && $this->sendToVerwaltendenMitarbeiterDozent) {
      $maVerwaltendEMailSet = $maVerwaltend->email != '' && $valid->isValidVar('email', $maVerwaltend->email);
      if ($maVerwaltendEMailSet) {
        return false;
      }
    }

    return true;
  }

  public function getEinrichtungRecipient(): array
  {
    $result = parent::getEinrichtungRecipient();

    $valid = \ValidierungWB::getInstance();

    if ($this->sendToPlanendenMitarbeiterDozent) {
      $maPlanend = $this->getPlanendenMitarbeiterDozent();
      if (!\is_null($maPlanend) && $maPlanend->email != '' && $valid->isValidVar('email', $maPlanend->email)) {
        $result[] = $maPlanend;
      }
    }


    if ($this->sendToVerwaltendenMitarbeiterDozent) {
      $maVerwaltend = $this->getVerwaltendenMitarbeiterDozent();
      if (!\is_null($maVerwaltend) && $maVerwaltend->email != '' && $valid->isValidVar('email', $maVerwaltend->email)) {
        $result[] = $maVerwaltend;
      }
    }

    return $result;
  }

  public function getEinrichtungRecipientPositionNames(): array
  {
    $result = parent::getEinrichtungRecipientPositionNames();


    if ($this->sendToPlanendenMitarbeiterDozent) {
      $maPlanend = $this->getPlanendenMitarbeiterDozent();
      if (!\is_null($maPlanend) && $maPlanend->email != '') {
        $result[] = self::RECIPIENT_PLANENDER_MITARBEITER_DOZENT;
      }
    }


    if ($this->sendToVerwaltendenMitarbeiterDozent) {
      $maVerwaltend = $this->getVerwaltendenMitarbeiterDozent();
      if (!\is_null($maVerwaltend) && $maVerwaltend->email != '') {
        $result[] = self::RECIPIENT_VERWALTENDER_MITARBEITER_DOZENT;
      }
    }

    return $result;
  }
}