<?php

declare(strict_types=1);

namespace App\Contracts;

/**
 * Hook 구독자 인터페이스.
 *
 * 그누보드 g7 Action/Filter 패턴의 Laravel 12 패리티.
 * Hook 을 구독하려는 모든 모듈/플러그인 클래스가 구현해야 한다.
 *
 * @example
 *   public static function getSubscribedHooks(): array {
 *       return [
 *           'core.user.after_create' => [['onUserCreated', 10]],
 *           'core.user.filter_create_data' => [['filterUserData', 20]],
 *       ];
 *   }
 */
interface HookSubscriber
{
    /**
     * 이 클래스가 구독하는 hook 정의를 반환.
     *
     * 반환 형식:
     *   [
     *       'event.name' => [
     *           ['methodName', $priority],  // priority 낮을수록 먼저 실행
     *           ['anotherMethod', 20],
     *       ],
     *   ]
     *
     * @return array<string, array<int, array{0: string, 1: int}>>
     */
    public static function getSubscribedHooks(): array;
}
