<?php

declare(strict_types=1);

namespace Acms\Services\Facades;

/**
 * Class Field
 *
 * Why not config/app.php の aliases（グローバル class_alias）に登録しない: グローバル名前空間に
 * 既存のレガシー Field クラス（\Field、カスタムフィールドのデータオブジェクト本体）が存在するため、
 * class_alias(Acms\Services\Facades\Field::class, 'Field') は「Cannot redeclare class Field」警告を
 * 発生させ実質失敗する（実測済み）。このファサードは `use Acms\Services\Facades\Field as FieldFacade;`
 * のように別名インポートするか、完全修飾名 `\Acms\Services\Facades\Field::save(...)` で利用する。
 *
 * @method static bool save(string $type, mixed $id, ?\Field $field = null, ?\Field $deleteField = null, ?int $rvid = null, ?int $targetBid = null) カスタムフィールドを保存する
 * @method static \Field load(?int $bid = null, ?int $uid = null, ?int $cid = null, ?int $mid = null, ?int $eid = null, ?string $unitId = null, ?int $rvid = null, bool $rewrite = false) カスタムフィールドを取得する
 * @method static void delete(string $type, mixed $id, ?int $rvid = null, ?int $blogId = null) カスタムフィールドを削除する
 * @method static void deleteFieldCache(string $type, mixed $id, ?int $rvid = null) フィールドキャッシュを削除する
 * @method static void flushCache() フィールドキャッシュをフラッシュする
 * @method static \Field_Validation extract(string $scp = 'field', ?\ACMS_Validator $V = null, ?\Field $deleteField = null) POSTデータからフィールドを抜き出す
 * @method static \Acms\Services\Field\ExtractResult extractResult(string $scp = 'field', ?\ACMS_Validator $V = null, ?\Field $deleteField = null) POSTデータからフィールドと削除フィールドをまとめて抜き出す
 * @method static \Field getDeleteField() extract()後の削除フィールドを取得（非推奨。extractResult() を使うこと）
 */
class Field extends Facade
{
    protected static $instance;

    /**
     * @return string
     */
    protected static function getServiceAlias()
    {
        return 'field';
    }

    /**
     * @return bool
     */
    protected static function isCache()
    {
        return true;
    }
}
