import 'auth_permission.dart';
import 'authenticated_user.dart';

/// 로그인 또는 토큰 갱신 결과를 표현하는 세션 모델.
class AuthSession {
  const AuthSession({
    required this.accessToken,
    required this.refreshToken,
    required this.expiresAt,
    required this.user,
    this.permissions = const [],
  });

  /// API 인증에 사용되는 액세스 토큰.
  final String accessToken;

  /// 토큰 갱신에 사용되는 리프레시 토큰.
  final String refreshToken;

  /// 액세스 토큰 만료 시각.
  final DateTime? expiresAt;

  /// 로그인한 사용자 정보.
  final AuthenticatedUser user;

  /// 사용자에게 할당된 권한 목록.
  final List<AuthPermission> permissions;

  /// 리프레시 토큰이 유효한지 여부를 단순 판단한다.
  bool get hasRefreshToken => refreshToken.isNotEmpty;
}
