<?php

namespace Acms\Services\Common;

use Acms\Contracts\Singleton;

class InjectTemplate extends Singleton
{
    /**
     * type 名 → 登録エントリーの配列。
     *
     * エントリーは文字列パス (旧 API) または callable (Twig 等で組み立てた HTML を
     * 返すクロージャ) のいずれか。順序は登録順を保つ。
     *
     * @var array<string, array<int, string|callable>>|null
     */
    protected $collection;

    /**
     * テンプレート差し込み対象を登録する。
     *
     * @param string $type
     * @param string|callable $entry テンプレートファイルへの絶対 / 相対パス、
     *     または HTML を返す callable。
     * @return void
     */
    public function add(string $type, string|callable $entry): void
    {
        if (!isset($this->collection[$type])) {
            $this->collection[$type] = [];
        }
        $this->collection[$type][] = $entry;
    }

    /**
     * @param string $type
     * @return array<int, string|callable>
     */
    public function get(string $type): array
    {
        return $this->collection[$type] ?? [];
    }
}
