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

namespace Kufer\Web\KuferTools\Utils\Kurstag\KurstagMedien;

use Kufer\Mail\EMail;
use Kufer\Mail\Sender;
use Kufer\Web\Classes\Mail\Sender\Settings\RecipientEinrichtung\EMailEinrichtungRecipientToolsKursSettings;
use Kufer\Web\Classes\Mail\Sender\Settings\RecipientEinrichtung\IEMailEinrichtungRecipientSettings;

abstract class ZusaetzlicheMedienMail
{
  
  protected $toolSettings;

  
  protected $user;

  public function __construct(int $pToolId)
  {
    $this->toolSettings = \ToolSettingsAPI::getToolSettings($pToolId);
    $this->user = \SessionOperations::getCurrentWebToolsUser();
  }

  
  public function sendMailToEinrichtung(\Kurstag $kurstagMitMedienZus): bool
  {
    
    if ($kurstagMitMedienZus->medien_zus != '' && !\SessionOperations::getVarValueWTIntern('kursplanung_medien_zus_submit_success_' . $kurstagMitMedienZus->id, false)) {
      \SessionOperations::setVarValueWTIntern('kursplanung_medien_zus_' . $kurstagMitMedienZus->id, $kurstagMitMedienZus->medien_zus);

      $sprachsettings = new \SprachSettingsObject();
      $emailSubject = 'Zusätzlich benötigte Medien zu ' . $sprachsettings->Kurs['Singular_mit_Artikel']['Dativ'] . ' ' . $kurstagMitMedienZus->kurs->getVarValue('kurzbez_titel');
      $emailText = $this->getEMailText4MedienZus($kurstagMitMedienZus);

      $email = new EMail\EMailPlaintext($emailSubject, $emailText);
      $email->addKuferToolsFooter('Zusätzlich benötigte Medien für einen Kurstag', $this->user, $kurstagMitMedienZus);

      $recipientSettings = new EMailEinrichtungRecipientToolsKursSettings($kurstagMitMedienZus->kurs);
      $recipientSettings
        ->setSettingMailToPlanendenMitarbeiter($this->toolSettings->medienMailAnPlanMa)
        ->setSettingMailToVerwaltendenMitarbeiter($this->toolSettings->medienMailAnVerwMa)
        ->setSettingMailToVerantwortendenMitarbeiter($this->toolSettings->medienMailAnVerantwMa);
      $emailSender = Sender\EMailSenderFactory::create();
      $sendMailResult = $this->sendMail($emailSender, $email, $recipientSettings);

      if ($sendMailResult->hasSentAllMails()) {
        \SessionOperations::setVarValueWTIntern('kursplanung_medien_zus_submit_success_' . $kurstagMitMedienZus->id, true);

        return true;
      } else {
        return false;
      }
    }
    
    
    return false;
  }

  
  private function getEMailText4MedienZus(\Kurstag $pKurstag): string
  {
    $dbwKurstagMedien = new \DBWorkKurstagMedien(1, true);
    $medienAry = $dbwKurstagMedien->getMedienAryFromMedienStr($pKurstag->medien_zus, $pKurstag->id);
    $result = $this->getUserNotice4Email($pKurstag);

    foreach ($medienAry as $medium) {
      $result .= $medium->medium . ' ' . $medium->bemerkung;
      $result = rtrim($result); 
      $result .= "\n";
    }

    return $result;
  }

  private function getUserNotice4Email(\Kurstag $pKurstag): string
  {
    return $this->getSenderBezeichnung() . ' ' . $this->user->name . ' ' . $this->user->vorname
      . ' benötigt zum Kurs ' . $pKurstag->knr . ' (' . $pKurstag->kurs->getVarValue('kurzbez_titel') . ') '
      . 'zum Kurstag am ' . $pKurstag->datum . ' um ' . $pKurstag->zeit_beg . ' zusätzlich noch folgende weitere Medien:'
      . "\n\n";
  }

  abstract protected function sendMail(Sender\IEMailSender $emailSender, EMail\IEMail $email, ?IEMailEinrichtungRecipientSettings $recipientSettings): Sender\Result\EMailSentResult;

  abstract protected function getSenderBezeichnung(): string;
}