<?php

namespace Acms\Services\Facades;

/**
 * @method static void setConstantsAuthSystemPage(\Field $queryParameter) 認証系ページの定数をセット
 * @method static void redirectToAuthPage(string $type = 'login') ログイン/サインインページへリダイレクト 'login'|'signin' のいずれかを渡す
 * @method static void postLoginProcessing() ログイン処理を実行
 * @method static bool canAccessAdminLoginFromCurrentIp() 管理者ログイン用: 現在のIPアドレスからアクセス可能か判断
 * @method static bool canAccessSigninFromCurrentIp() 一般サインイン用: 現在のIPアドレスからアクセス可能か判断
 * @method static \Acms\Services\Login\AuthSystemResolution resolveAuthSystemRequest() 認証系URLの解決結果（テンプレート表示 or リダイレクト）を取得
 * @method static 'login'|'signin'|null resolveSecretRedirectTarget(?string $blogStatus, ?string $categoryStatus, bool $requiresAuthentication, bool $preferSignin, bool $isAuthRequiredPage, bool $canMemberSignin, bool $isMemberAuthSystemPage, bool $isMemberAuthPageFeatureAvailable, bool $canAccessSigninFromCurrentIp, bool $canAccessAdminLoginFromCurrentIp) シークレット遮断のリダイレクト先を解決
 * @method static int findUser(string $email, int $bid) ユーザーIDを検索
 * @method static int createUser(\Field_Validation $user, bool $subscribeLoginAnywhere) ユーザーを作成
 * @method static int addUserFromOauth(array $data) OAuth認証でユーザーを追加
 * @method static void updateUser(int $uid, \Field_Validation $user, bool $subscribeLoginAnywhere = false) ユーザーを更新
 * @method static string createTimedLinkParams(string $context, int $lifetime) タイムリンクパラメータを作成
 * @method static array validateTimedLinkParams(string $key, string $salt, string $context) タイムリンクパラメータを検証
 * @method static true subscriberActivation(int $uid) 特車ユーザーのアクティベーションを処理
 * @method static void authenticateUser(int $userId) ログインを確定（最終ログイン日時の更新＋パスワード再設定トークンのクリア＋セッション生成）
 * @method static string[] getSinginAuth() 一般サインインできる権限を取得
 * @method static string[] getAdminLoginAuth() 管理ログインできる権限を取得
 * @method static string getLogoutRedirectUrl(int $userId) ログアウト時のリダイレクト先URLを取得
 * @method static bool checkAllowedDevice(array $user) ログインが許可されたデバイスかどうかを確認
 * @method static string userIconFromUri(string $imageUri) ユーザーアイコンのURIを取得
 * @method static never loginRedirect(array $user, string|null $fieldRedirectUrl = null) ログイン後のリダイレクト
 * @method static string|null resizeUserIcon(string $squarePath) ユーザーアイコンをリサイズ
 * @method static void addExtraLoggedInCookie(int $uid) ログインしている場合、権限のCookieを追加
 * @method static void updateSessionClientInfo(int $uid) 同時ログイン判定のための、クライアント情報を更新
 * @method static void removeExtraLoggedInCookie() ログインしている場合、権限のCookieを削除
 * @method static bool isAuthRequiredPage() 現在のページが認証が必要なページかどうか判定
 * @method static bool isLoggedIn() 現在のセッションがログイン状態かどうか判定
 * @method static bool canMemberSignin() 会員サインイン機能が有効かどうか判定
 * @method static bool isExactPath(int $bid, string $segment) 指定されたパスがブログトップからのパスで余分なパスがないかどうかを判定
 * @method static bool matchExactPath(string $blogCode, string $segment, string $requestPath) ブログコードとセグメントから生成したパスが、リクエストパスと一致するかを判定
 * @method static bool canLoginPage(int $bid, string $segment) 認証前のログインページを表示できるかどうかを判定
 * @method static bool isValidAuthenticatedPath(int $bid, string $segment) ログイン済みユーザーのページで正しいパスかどうかを判定
 * @method static bool isAdminAuthSystemPage() 現在のページが管理者向けの認証系ページかどうか判定
 * @method static bool isMemberAuthSystemPage() 現在のページが会員向けの認証系ページかどうか判定
 */
class Login extends Facade
{
    protected static $instance;

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

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