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

namespace Kufer\Web\KuferTools\Mitarbeiter\TeilnehmerInfo\SammelEMail;

use Kufer\Mail\Address\EMailAddress;
use Kufer\Mail\Address\IEMailAddress;
use Kufer\Mail\EMail\IEMail;
use Kufer\Mail\Sender\Result\EMailSentResult;
use Kufer\Mail\Sender\Settings\Sender\Einrichtung\IEMailEinrichtungSenderSettings;
use Kufer\Mail\Sender\Settings\Sender\Person\EMailTransformSenderTools;

class SendSammelEMailUseCase extends \Kufer\Web\KuferTools\Basis\TeilnehmerInfo\SammelEMail\SendSammelEMailUseCase
{
  public static function getToolSectionId()
  {
    return 41;
  }

  public static function getToolId()
  {
    return \ToolsAPI::TOOL_TEILNEHMERINFO_MA;
  }

  protected function sendMail(IEMail $email, array $teilnehmer): EMailSentResult
  {
    $tool0Settings = \ToolSettingsAPI::getToolSettings(0);
    $emailAnTeilnehmerSenderMultiple = $this->toolSettings->emailAnTeilnehmerSenderMultiple && $tool0Settings->absenderMitarbeiterAnTeilnehmer === 'Person';
    $fnTransform = !$emailAnTeilnehmerSenderMultiple ? null : function() {
      return new class($this->request->email_num) extends EMailTransformSenderTools {
        public $email_num;

        public function __construct($email_num)
        {
          $this->email_num = $email_num;
        }

        public function getSenderForMitarbeiterToTeilnehmer(\BASysBenutzer $mitarbeiter, IEMailEinrichtungSenderSettings $senderSettings): IEMailAddress
        {
          $result = parent::getSenderForMitarbeiterToTeilnehmer($mitarbeiter, $senderSettings);
          if ($result != $mitarbeiter) {
            return $result; 
          }

          return $this->getSenderTo($mitarbeiter, $senderSettings);
        }

        public function getReplyToForMitarbeiterToTeilnehmer(\BASysBenutzer $mitarbeiter, IEMailEinrichtungSenderSettings $senderSettings): IEMailAddress
        {
          $result = parent::getReplyToForMitarbeiterToTeilnehmer($mitarbeiter, $senderSettings);
          if ($result != $mitarbeiter) {
            return $result; 
          }

          return $this->getSenderTo($mitarbeiter, $senderSettings);
        }

        protected function getSenderTo(\BASysBenutzer $mitarbeiter, IEMailEinrichtungSenderSettings $senderSettings): IEMailAddress
        {
          $valid = \ValidierungWB::getInstance();
          switch ($this->email_num) {
            default:
            case '0':
              return $mitarbeiter;
            case '1':
              if (!$valid->isValidVar('email', $mitarbeiter->email2)) {
                return $mitarbeiter;
              } else {
                return new EMailAddress($mitarbeiter->getEMailName(), $mitarbeiter->email2);
              }
              
            case '2':
              if (!$valid->isValidVar('email', $mitarbeiter->email3)) {
                return $mitarbeiter;
              } else {
                return new EMailAddress($mitarbeiter->getEMailName(), $mitarbeiter->email3);
              }
          }
        }
      };
    };

    $sender = \Kufer\Mail\Sender\EMailSenderFactory::create($fnTransform);

    return $sender->sendFromMitarbeiterToTeilnehmer($email, \SessionOperations::getCurrentWebToolsMitarbeiter(), $teilnehmer);
  }
}