<?php

declare(strict_types=1);

namespace Seka\Terminy\Mail\Udalost;

use Illuminate\Support\Str;
use Illuminate\Mail\Mailable;
use Illuminate\Bus\Queueable;
use Seka\Terminy\Dtos\UdalostDTO;
use Elceka\Laravel\HashId\Hasher;
use Illuminate\Support\Facades\URL;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

/**
 * Class AktualizovanaUdalostMail
 *
 * @package Seka\Terminy\Mail\Udalost
 */
final class AktualizovanaUdalostMail extends Mailable implements ShouldQueue
{
    use Queueable;
    use SerializesModels;

    /**
     * @var \Seka\Terminy\Dtos\UdalostDTO
     */
    public UdalostDTO $udalost;

    /**
     * @var \Seka\Terminy\Dtos\UdalostDTO
     */
    public UdalostDTO $udalostPovodna;

    /**
     * AktualizovanaUdalostMail constructor.
     *
     * @param \Seka\Terminy\Dtos\UdalostDTO $udalost
     * @param \Seka\Terminy\Dtos\UdalostDTO $udalostPovodna
     */
    public function __construct(UdalostDTO $udalost, UdalostDTO $udalostPovodna)
    {
        $this->udalost = $udalost;
        $this->udalostPovodna = $udalostPovodna;
    }

    /**
     * @return mixed
     * @throws \Illuminate\Contracts\Container\BindingResolutionException
     */
    public function build()
    {
        $urlUdalosti = URL::signedRoute(
            'modul.terminy.frontend.udalosti.udalost.show',
            [
                'mtUdalostId' => Hasher::encode($this->udalost->id)
            ]
        );

        return $this
            ->subject(Str::ucfirst($this->udalost->druh->label))
            ->markdown('Terminy::mail.udalost.public.aktualizovana')
            ->withUdalost($this->udalost)
            ->withUdalostPovodna($this->udalostPovodna)
            ->withUrlUdalosti($urlUdalosti)
            ->replyTo(config('terminy.podpora.email'));
    }
}
