<?php

namespace Acms\Plugins\SamplePlugin\Modules\Get\V2;

use Acms\Modules\Get\V2\Base;

/**
 * プラグインが提供する V2 モジュールのサンプル。
 *
 * ディレクトリ規約・namespace は本体の V2 モジュール (ablogcms/php/Modules/Get/V2)
 * と同じで、Acms\Plugins\{PluginName}\Modules\Get\V2\{Module} に配置する。
 * main.php がプラグインの base 名前空間に加えて {base}\Modules も psr4 登録するため、
 * ServiceProvider で addNamespace を手書きしなくても解決される。
 *
 * モジュール名を "Sample" にしないのは、Custom 拡張領域に同梱の
 * Acms\Custom\Modules\Get\V2\Sample と名前が衝突するため。main.php は Custom を
 * プラグインより先に登録するので、V2_Sample は Custom 側が先勝ちでプラグインの
 * モジュールに到達しない。プラグイン側は衝突しない名前を付ける必要がある。
 *
 * Twig テンプレートからの呼び出し例:
 *
 *   {% set greeting = module('V2_Greeting') %}
 *   <p>{{ greeting.message }}</p>
 *   <ul>
 *   {% for item in greeting.items %}
 *     <li>{{ item.id }}: {{ item.name }}</li>
 *   {% endfor %}
 *   </ul>
 *
 * モジュールID を割り当てて呼ぶ場合は識別子を第 2 引数に渡す:
 *
 *   {% set greeting = module('V2_Greeting', 'greeting_id') %}
 */
class Greeting extends Base
{
    /**
     * @inheritDoc
     * @return array<string, mixed>
     */
    public function get(): array
    {
        $items = [
            ['id' => 'aaa', 'name' => '山田太郎'],
            ['id' => 'bbb', 'name' => '鈴木次郎'],
            ['id' => 'ccc', 'name' => '佐藤三郎'],
        ];

        return [
            'message' => 'Hello from SamplePlugin V2 module',
            'count' => count($items),
            'items' => $items,
            // 解決済みの URL コンテキスト (bid / cid / eid / keyword ...) を Base から受け取る
            'context' => $this->getBaseParams(),
            // モジュールID でカスタムフィールドを有効化している場合はその値、無効なら null
            'moduleFields' => $this->buildModuleField(),
        ];
    }
}
