<?php

namespace App\Http\Traits;

trait AuthenticatesUser
{
    /**
     * セッション切れ時のログインリダイレクト（マルチテナント対応）
     * 
     * @param string|null $screenName ログに記録する画面名
     * @param bool $saveIntended ログイン後に元のURLに戻るか（true: 戻る, false: マイページ）
     * @return \Illuminate\Http\RedirectResponse|null
     */
    protected function handleSessionExpired(?string $screenName = null, bool $saveIntended = true)
    {
        $userId = session('user_id');

        if ($userId) {
            return null;  // 認証済み
        }

        // 運営元コード取得
        $management = session('management');
        $managementCode = $management->management_code ?? request()->segment(1);

        if (!$managementCode) {
            \Log::error("[ERROR] " . now()->format('Y-m-d H:i:s') . " 運営元取得失敗 url=" . request()->fullUrl());
            abort(404);
        }

        // ログ記録
        $logMessage = "[INFO] " . now()->format('Y-m-d H:i:s') . " 未認証ユーザーアクセス（セッション切れ）";
        if ($screenName) {
            $logMessage .= " {$screenName}画面";
        }
        $logMessage .= " management_code=" . $managementCode;
        \Log::info($logMessage);

        if ($saveIntended) {
            // ログイン後に元の画面に戻る
            return redirect()->guest(route('login_input', ['management_code' => $managementCode]));
        } else {
            // ログイン後はマイページトップへ
            session()->forget('url.intended');
            return redirect()->route('login_input', ['management_code' => $managementCode]);
        }
    }
}
