<?php

namespace App\EventHooks\Ticket;

use App\EventHooks\HookEvent;
use App\Models\Ticket;

/**
 * Fire noktası: TicketController::merge + bulkAction('merge') →
 * HookBridge::fireAction('TicketMerge', [...]).
 * Context: mergedTicketIds (kaynak ticket id dizisi), masterTicketId (hedef id).
 *
 * NOT: Fire context'i tek tek kaynak model değil id DİZİSİ taşır; bu yüzden
 * sourceTickets() (çoğul) gerçek sözleşmedir. targetTicket() masterTicketId'den lazy load.
 */
class TicketMerged extends HookEvent
{
    public const HOOK = 'TicketMerge';

    /** @return array<int> Birleştirilen (kaynak) ticket id'leri. */
    public function mergedTicketIds(): array
    {
        $ids = $this->get('mergedTicketIds', []);

        return is_array($ids) ? array_values(array_map('intval', $ids)) : [];
    }

    public function masterTicketId(): ?int
    {
        $id = $this->get('masterTicketId');

        return $id ? (int) $id : null;
    }

    /** Hedef (master) ticket modeli. */
    public function targetTicket(): ?Ticket
    {
        $id = $this->masterTicketId();

        return $id ? Ticket::find($id) : null;
    }

    /** @return \Illuminate\Support\Collection<int, Ticket> Kaynak ticket modelleri. */
    public function sourceTickets()
    {
        $ids = $this->mergedTicketIds();

        return $ids ? Ticket::whereIn('id', $ids)->get() : collect();
    }
}
