<?php

namespace App\ValueObjects\Communications;

use App\Enum\Contact\MessageChannel;
use App\Enum\Contact\MessageOrigin;
use App\Models\Contact\ContactTemplate;
use App\Models\User\User;
use Illuminate\Database\Eloquent\Model;

class DispatchRequest
{
    public function __construct(
        public readonly Model $messageable,
        public readonly ?ContactTemplate $template = null,
        public readonly ?Model $related = null,
        /** Explicit send-to recipient. Falls back to $messageable when null. */
        public readonly ?Model $recipient = null,
        public readonly ?User $user = null,
        public readonly ?int $senderEmailId = null,
        public readonly ?int $smsSenderId = null,
        public readonly MessageOrigin $origin = MessageOrigin::MANUAL,
        public readonly array $originDetail = [],
        public readonly array $extraContext = [],
        public readonly bool $force = false,
        public readonly ?MessageChannel $channel = null,
        public readonly ?string $freeSubject = null,
        public readonly ?string $freeBodyText = null,
        public readonly ?string $reviewSubject = null,
        public readonly ?string $reviewBodyText = null,
    ) {}
}
