import 'dart:convert'; import 'package:immich_mobile/shared/models/device_info.model.dart'; class AuthenticationState { final String deviceId; final String deviceType; final String userId; final String userEmail; final bool isAuthenticated; final String firstName; final String lastName; final bool isAdmin; final bool isFirstLogin; final String profileImagePath; final DeviceInfoRemote deviceInfo; AuthenticationState({ required this.deviceId, required this.deviceType, required this.userId, required this.userEmail, required this.isAuthenticated, required this.firstName, required this.lastName, required this.isAdmin, required this.isFirstLogin, required this.profileImagePath, required this.deviceInfo, }); AuthenticationState copyWith({ String? deviceId, String? deviceType, String? userId, String? userEmail, bool? isAuthenticated, String? firstName, String? lastName, bool? isAdmin, bool? isFirstLoggedIn, String? profileImagePath, DeviceInfoRemote? deviceInfo, }) { return AuthenticationState( deviceId: deviceId ?? this.deviceId, deviceType: deviceType ?? this.deviceType, userId: userId ?? this.userId, userEmail: userEmail ?? this.userEmail, isAuthenticated: isAuthenticated ?? this.isAuthenticated, firstName: firstName ?? this.firstName, lastName: lastName ?? this.lastName, isAdmin: isAdmin ?? this.isAdmin, isFirstLogin: isFirstLoggedIn ?? isFirstLogin, profileImagePath: profileImagePath ?? this.profileImagePath, deviceInfo: deviceInfo ?? this.deviceInfo, ); } @override String toString() { return 'AuthenticationState(deviceId: $deviceId, deviceType: $deviceType, userId: $userId, userEmail: $userEmail, isAuthenticated: $isAuthenticated, firstName: $firstName, lastName: $lastName, isAdmin: $isAdmin, isFirstLoggedIn: $isFirstLogin, profileImagePath: $profileImagePath, deviceInfo: $deviceInfo)'; } Map toMap() { final result = {}; result.addAll({'deviceId': deviceId}); result.addAll({'deviceType': deviceType}); result.addAll({'userId': userId}); result.addAll({'userEmail': userEmail}); result.addAll({'isAuthenticated': isAuthenticated}); result.addAll({'firstName': firstName}); result.addAll({'lastName': lastName}); result.addAll({'isAdmin': isAdmin}); result.addAll({'isFirstLogin': isFirstLogin}); result.addAll({'profileImagePath': profileImagePath}); result.addAll({'deviceInfo': deviceInfo.toMap()}); return result; } factory AuthenticationState.fromMap(Map map) { return AuthenticationState( deviceId: map['deviceId'] ?? '', deviceType: map['deviceType'] ?? '', userId: map['userId'] ?? '', userEmail: map['userEmail'] ?? '', isAuthenticated: map['isAuthenticated'] ?? false, firstName: map['firstName'] ?? '', lastName: map['lastName'] ?? '', isAdmin: map['isAdmin'] ?? false, isFirstLogin: map['isFirstLogin'] ?? false, profileImagePath: map['profileImagePath'] ?? '', deviceInfo: DeviceInfoRemote.fromMap(map['deviceInfo']), ); } String toJson() => json.encode(toMap()); factory AuthenticationState.fromJson(String source) => AuthenticationState.fromMap(json.decode(source)); @override bool operator ==(Object other) { if (identical(this, other)) return true; return other is AuthenticationState && other.deviceId == deviceId && other.deviceType == deviceType && other.userId == userId && other.userEmail == userEmail && other.isAuthenticated == isAuthenticated && other.firstName == firstName && other.lastName == lastName && other.isAdmin == isAdmin && other.isFirstLogin == isFirstLogin && other.profileImagePath == profileImagePath && other.deviceInfo == deviceInfo; } @override int get hashCode { return deviceId.hashCode ^ deviceType.hashCode ^ userId.hashCode ^ userEmail.hashCode ^ isAuthenticated.hashCode ^ firstName.hashCode ^ lastName.hashCode ^ isAdmin.hashCode ^ isFirstLogin.hashCode ^ profileImagePath.hashCode ^ deviceInfo.hashCode; } }