<?php

declare(strict_types=1);

namespace Acms\Services\Facades;

/**
 * Class Response
 *
 * 実体は {@see \Acms\Services\Response\Emitter}。ヘッダー値の組み立ては
 * 'response.header-builder'（{@see \Acms\Services\Response\HeaderBuilder}）に委譲している。
 * 独自のセキュリティヘッダー（CSP 等）を差し込みたい拡張は、Emitter のサブクラスを作って
 * ServiceProvider で 'response' を再登録する（Emitter 内部の呼び出しは $this-> の動的ディスパッチ
 * なので、addSecurityHeader() をオーバーライドすれば json() / safeHeaders() 経由にも反映される）。
 *
 * @method static never json(mixed $data) JSON形式のレスポンスを返して終了する
 * @method static void safeHeaders(int $code = 200, string $mime = 'text/html') 安全なヘッダーを設定し、クライアントキャッシュを無効化する
 * @method static void addSecurityHeader() セキュリティヘッダーを追加する
 * @method static void clientCacheHeader(bool $noCache = false) クライアントキャッシュヘッダーを設定する
 * @method static void backgroundRedirect(string $url, int $statusCode = 301) すぐにリダイレクトし、同一プロセスのバックグラウンドで処理を実行
 */
class Response extends Facade
{
    protected static $instance;

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

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