<?php

namespace Acms\Services\Facades;

/**
 * Class Common
 *
 * @method static string getEncryptIv() 暗号化用のIVを取得する（非推奨。'crypto' サービスの Encrypter::getEncryptIv を使うこと）
 * @method static string encrypt(string $string, string $iv) 文字列を暗号化する（非推奨。'crypto' サービスの Encrypter::encrypt を使うこと）
 * @method static string decrypt(string $cipherText, string $iv) 暗号化された文字列を復号化する（非推奨。'crypto' サービスの Encrypter::decrypt を使うこと）
 * @method static string parseMarkdown(string $txt) Markdownを解析する
 * @method static void backgroundRedirect(string $url, int $statusCode = 301) すぐにリダイレクトし、同一プロセスのバックグラウンドで処理を実行（非推奨。'response' サービスの Emitter::backgroundRedirect を使うこと）
 * @method static void addSecurityHeader() セキュリティヘッダーを追加する（非推奨。'response' サービスの Emitter::addSecurityHeader を使うこと）
 * @method static string createCsrfToken() CSRFトークンを作成する（非推奨。'security.csrf' サービスの CsrfTokenManager::createCsrfToken を使うこと）
 * @method static string addCsrfToken(string $tpl) CSRFトークンをテンプレートに追加する（非推奨。'security.csrf' サービスの CsrfTokenManager::addCsrfToken を使うこと）
 * @method static bool csrfTokenExists() CSRFトークンがセッションに存在するか確認する（非推奨。'security.csrf' サービスの CsrfTokenManager::csrfTokenExists を使うこと）
 * @method static bool checkCsrfToken(string $token) CSRFトークンが有効か確認する（非推奨。'security.csrf' サービスの CsrfTokenManager::checkCsrfToken を使うこと）
 * @method static string getHttpHeader(string $name) HTTPヘッダーを取得する（非推奨。'security.csrf' サービスの CsrfTokenManager::getHttpHeader を使うこと）
 * @method static bool isAuthorizedAjaxRequest(int $level = 1) Ajaxアクセスが許可されているか確認する（非推奨。'security.csrf' サービスの CsrfTokenManager::isAuthorizedAjaxRequest を使うこと）
 * @method static string fixAliasPath(string $txt) 管理画面でテンプレート直で書かれているパスを、エイリアスを含んだURLに修正
 * @method static string getDeleteField() extract()後の削除フィールドを取得
 * @method static string getMailTxt(string $path, \Field $field, ?string $charset = null) メールテキストを取得する（非推奨。'mailer.template-renderer' サービスの TemplateRenderer::getMailTxt を使うこと）
 * @method static string getMailTxtFromTxt(string $txt, \Field $field) テキストからメールテキストを取得する (tpl_twig 有効時は Twig→ACMS の 2 段で処理する)（非推奨。'mailer.template-renderer' サービスの TemplateRenderer::getMailTxtFromTxt を使うこと）
 * @method static non-empty-array<'additional_headers'|'mail_from'|'sendmail_path'|'smtp-google'|'smtp-google-user'|'smtp-host'|'smtp-pass'|'smtp-verify-peer'|'smtp-port'|'smtp-user', string> mailConfig(array{smtp-host?: string, smtp-port?: string, smtp-user?: string, smtp-pass?: string, smtp-verify-peer?: string, mail_from?: string, sendmail_path?: string, additional_headers?: string, smtp-google?: string, smtp-google-user?: string} $argConfig = []) メール設定の取得（非推奨。'mailer.config-resolver' サービスの ConfigResolver::mailConfig を使うこと）
 * @method static string genPass(int $len) パスワードを生成する（非推奨。'crypto.random' サービスの RandomGenerator::genPass を使うこと）
 * @method static string[] getTagsFromString(string $string, bool $checkReserved = true) 文字列からタグを取得する（非推奨。'tag.parser' サービスの TagParser::getTagsFromString を使うこと）
 * @method static string loadEntryFulltext(int $eid) エントリーのフルテキストを取得する（非推奨。Fulltext::loadEntryFulltext を使うこと）
 * @method static string loadUserFulltext(int $uid) ユーザーのフルテキストを取得する（非推奨。Fulltext::loadUserFulltext を使うこと）
 * @method static string loadCategoryFulltext(int $cid) カテゴリーのフルテキストを取得する（非推奨。Fulltext::loadCategoryFulltext を使うこと）
 * @method static string loadBlogFulltext(int $bid) ブログのフルテキストを取得する（非推奨。Fulltext::loadBlogFulltext を使うこと）
 * @method static void saveFulltext(string $type, int $id, string $fulltext = null, ?int $targetBid = null) フルテキストを保存する（非推奨。Fulltext::saveFulltext を使うこと）
 * @method static never download(string $path, string $fileName, string|bool $extension = false, bool $remove = false, \Acms\Services\Storage\Contracts\Filesystem $storage = null) ファイルをダウンロードする（非推奨。'response.downloader' サービスの FileDownloader::handle を使うこと）
 * @method static void deleteFieldCache(string $type, int $id, ?int $rvid = null) フィールドキャッシュを削除する
 * @method static void flushCache() フィールドキャッシュをフラッシュする
 * @method static void deleteField(string $type, int $id, ?int $rvid = null, ?int $blogId = null) カスタムフィールドを削除する
 * @method static \Field loadField(?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 bool saveField(string $type, ($type is 'unit_id' ? string : int) $id, ?\Field $Field = null, ?\Field $deleteField = null, ?int $rvid = null, ?int $targetBid = null) カスタムフィールドを保存する
 * @method static \Field getUriObject(\Field $Post) フォームのURIオブジェクトを取得する
 * @method static \Field extract(string $scp = 'field', ?\ACMS_Validator $V = null, ?\Field $deleteField = null) フィールドを取得する
 * @method static array getJsModules() acms.js のクエリを取得する（非推奨。'view.js-modules' サービスの JsModulesBuilder::getJsModules を使うこと）
 * @method static bool isSafeUrl(string $url) a-blog cms で管理しているドメインのURLかチェックする（非推奨。'url.managed-domain' サービスの ManagedDomainRegistry::isSafeUrl を使うこと）
 * @method static bool isManagedDomain(string $domain, array $additionalDomains = []) 指定されたドメインが管理ドメインかどうかを判定（非推奨。'url.managed-domain' サービスの ManagedDomainRegistry::isManagedDomain を使うこと）
 * @method static string[] getManagedOrigins() 管理ドメインを scheme 付きオリジン（scheme://host[:port]）の配列として取得する（非推奨。'url.managed-domain' サービスの ManagedDomainRegistry::getManagedOrigins を使うこと）
 * @method static never responseJson(array $data) JSON形式のレスポンスを返す（非推奨。'response' サービスの Emitter::json を使うこと）
 * @method static void logLockPost(string $lockKey) ロックポストをログに記録する（非推奨。'security.post-rate-limiter' サービスの PostRateLimiter::logLockPost を使うこと）
 * @method static bool validateLockPost(string $lockKey, int $trialTime = 5, int $trialNumber = 5, int $lockTime = 15, bool $remoteAddr = true) ロックポストを検証する（非推奨。'security.post-rate-limiter' サービスの PostRateLimiter::validateLockPost を使うこと）
 * @method static string camelize(string $str) 文字列をキャメルケースに変換する
 * @method static void clientCacheHeader(bool $noCache = false) クライアントキャッシュヘッダーを設定する（非推奨。'response' サービスの Emitter::clientCacheHeader を使うこと）
 * @method static string[] buildCacheableHeaders(int $cacheExpireClient, ?int $lastModifiedTime = null) クライアント・中間キャッシュ向けの Cache-Control 系ヘッダーを組み立てる（非推奨。'response.header-builder' サービスの HeaderBuilder::buildCacheableHeaders を使うこと）
 * @method static void saveCache(string $chid, string $contents, string $mime) キャッシュを保存する（非推奨。'cache.page-writer' サービスの PageCacheWriter::saveCache を使うこと）
 * @method static array exceptionArray(\Throwable $th, array $add = []) エラー情報を配列に変換する
 * @method static string[] getInheritedThemes(string $theme) 指定されたテーマの継承テーマ・システムテーマすべてのテーマの配列を取得する（非推奨。'template.theme-inheritance' サービスの ThemeInheritanceResolver::getInheritedThemes を使うこと）
 * @method static void validateFileUpload(string $name) ファイルアップロードを検証する（非推奨。'validator.file-upload' サービスの FileUploadValidator::validateFileUpload を使うこと）
 * @method static bool isLocalPrivateStorage() プライベートストレージの設定がローカルかどうか（非推奨。'storage.asset-synchronizer' サービスの AssetSynchronizer::isLocalPrivateStorage を使うこと）
 * @method static bool isLocalPublicStorage() パブリックストレージの設定がローカルかどうか（非推奨。'storage.asset-synchronizer' サービスの AssetSynchronizer::isLocalPublicStorage を使うこと）
 * @method static void uploadAssetDirectory(string $from, string $to, bool $isPublic) アセットディレクトリをアップロードする（非推奨。'storage.asset-synchronizer' サービスの AssetSynchronizer::uploadAssetDirectory を使うこと）
 * @method static void setAppSalt() アプリ全体で使用するSaltを更新・設定する（非推奨。'crypto.salt' サービスの SaltRepository::setAppSalt を使うこと）
 * @method static string getCurrentSalt() 現在のソルトを取得（非推奨。'crypto.salt' サービスの SaltRepository::getCurrentSalt を使うこと）
 * @method static void setCurrentSalt(string $salt) 現在のソルトを設定（非推奨。'crypto.salt' サービスの SaltRepository::setCurrentSalt を使うこと）
 * @method static string getPreviousSalt() 1つ前のソルトを取得（非推奨。'crypto.salt' サービスの SaltRepository::getPreviousSalt を使うこと）
 * @method static void setPreviousSalt(string $salt) 1つ前のソルトを設定（非推奨。'crypto.salt' サービスの SaltRepository::setPreviousSalt を使うこと）
 * @method static string getAppSalt() アプリケーションのソルトを取得（非推奨。'crypto.salt' サービスの SaltRepository::getAppSalt を使うこと）
 * @method static string replaceDeliveryUrl(string $url) メディアの配信先URLを書き換え（非推奨。'url.delivery-rewriter' サービスの DeliveryUrlRewriter::replaceDeliveryUrl を使うこと）
 * @method static string replaceDeliveryUrlAll(string $txt) メディアの配信先URLを書き換え（全て）（非推奨。'url.delivery-rewriter' サービスの DeliveryUrlRewriter::replaceDeliveryUrlAll を使うこと）
 * @method static string toAbsoluteUrl(string $path, string $offset = '', ?string $baseUrl = null) URLを完全な absolute URL（scheme + host + path）に変換する（非推奨。'url' サービスの UrlResolver::toAbsoluteUrl を使うこと）
 * @method static string toRootRelativeUrl(string $path, string $offset = '', ?string $baseUrl = null) URLを root-relative URL（/path 形式、scheme/host を含まない）に変換する（非推奨。'url' サービスの UrlResolver::toRootRelativeUrl を使うこと）
 * @method static string resolveUrl(string $path, string $offset = '') V2モジュール、V2APIの場合は絶対URLに変換する（非推奨。'url' サービスの UrlResolver::resolveUrl を使うこと）
 * @method static string convertAssetUrlsToAbsolute(string $html, string $baseUrl) HTML内のアセット参照（img/video/source/audio/track/link、srcset 含む）のみを絶対URL化する。<a>/<area> は触らない（ヘッドレス用途）（非推奨。'url' サービスの UrlResolver::convertAssetUrlsToAbsolute を使うこと）
 * @method static string convertRelativeUrlToAbsolute(string $url, string $baseUrl) 単一の相対URLを絶対URL（フルURL）に変換する（非推奨。'url' サービスの UrlResolver::convertRelativeUrlToAbsolute を使うこと）
 * @method static bool isV2Module() V2モジュールとして実行中か判定（非推奨。'view.build-context' サービスの BuildContext::isV2Module を使うこと）
 * @method static void setV2Module(bool $isV2Module) V2モジュールとして実行中か設定（非推奨。'view.build-context' サービスの BuildContext::setV2Module を使うこと）
 * @method static bool isForceV1Build() 強制的にV1ビルドを行うか判定（非推奨。'view.build-context' サービスの BuildContext::isForceV1Build を使うこと）
 * @method static void setForceV1Build(bool $isForceV1Build) 強制的にV1ビルドを行うか設定（非推奨。'view.build-context' サービスの BuildContext::setForceV1Build を使うこと）
 * @method static void setSafeHeadersWithoutCache(int $code = 200, string $mime = 'text/html') 安全なヘッダーを設定し、クライアントキャッシュを無効化するヘッダーを設定する
 * @method static bool isPostSizeExceeded(string $requestMethod, ?int $contentLength, int $postMaxBytes) POSTボディサイズがpost_max_sizeを超過しているか判定する（非推奨。'response.header-builder' サービスの HeaderBuilder::isPostSizeExceeded を使うこと）
 */
class Common extends Facade
{
    protected static $instance;

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

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