import 'package:hive/hive.dart'; import '../../domain/entities/server.dart'; import 'server_model.dart'; part 'server_hive_model.g.dart'; @HiveType(typeId: 0) class ServerHiveModel extends HiveObject { @HiveField(0) final String id; @HiveField(1) final String alias; @HiveField(2) final String host; @HiveField(3) final String user; @HiveField(4) final String password; @HiveField(5) final bool enabled; @HiveField(6) final bool deactivateEcho; @HiveField(7) final bool deactivateLiveCheck; @HiveField(8) final String serverType; // 'gcore' or 'geviscope' @HiveField(9) final bool isDirty; // Has unsaved changes @HiveField(10) final DateTime lastModified; @HiveField(11) final String? syncOperation; // 'create', 'update', 'delete', null ServerHiveModel({ required this.id, required this.alias, required this.host, required this.user, required this.password, required this.enabled, required this.deactivateEcho, required this.deactivateLiveCheck, required this.serverType, this.isDirty = false, DateTime? lastModified, this.syncOperation, }) : lastModified = lastModified ?? DateTime.now(); // Convert from domain entity to Hive model factory ServerHiveModel.fromEntity(Server server, {bool isDirty = false, String? syncOperation}) { return ServerHiveModel( id: server.id, alias: server.alias, host: server.host, user: server.user, password: server.password, enabled: server.enabled, deactivateEcho: server.deactivateEcho, deactivateLiveCheck: server.deactivateLiveCheck, serverType: server.type == ServerType.gcore ? 'gcore' : 'geviscope', isDirty: isDirty, syncOperation: syncOperation, ); } // Convert from ServerModel (API) to Hive model factory ServerHiveModel.fromServerModel(ServerModel serverModel) { return ServerHiveModel( id: serverModel.id, alias: serverModel.alias, host: serverModel.host, user: serverModel.user, password: serverModel.password, enabled: serverModel.enabled, deactivateEcho: serverModel.deactivateEcho, deactivateLiveCheck: serverModel.deactivateLiveCheck, serverType: serverModel.serverType, isDirty: false, syncOperation: null, ); } // Convert to domain entity Server toEntity() { return Server( id: id, alias: alias, host: host, user: user, password: password, enabled: enabled, deactivateEcho: deactivateEcho, deactivateLiveCheck: deactivateLiveCheck, type: serverType == 'gcore' ? ServerType.gcore : ServerType.geviscope, ); } // Convert to ServerModel for API calls ServerModel toServerModel() { return ServerModel( id: id, alias: alias, host: host, user: user, password: password, enabled: enabled, deactivateEcho: deactivateEcho, deactivateLiveCheck: deactivateLiveCheck, serverType: serverType, ); } // Create a copy with modified fields ServerHiveModel copyWith({ String? id, String? alias, String? host, String? user, String? password, bool? enabled, bool? deactivateEcho, bool? deactivateLiveCheck, String? serverType, bool? isDirty, DateTime? lastModified, String? syncOperation, }) { return ServerHiveModel( id: id ?? this.id, alias: alias ?? this.alias, host: host ?? this.host, user: user ?? this.user, password: password ?? this.password, enabled: enabled ?? this.enabled, deactivateEcho: deactivateEcho ?? this.deactivateEcho, deactivateLiveCheck: deactivateLiveCheck ?? this.deactivateLiveCheck, serverType: serverType ?? this.serverType, isDirty: isDirty ?? this.isDirty, lastModified: lastModified ?? this.lastModified, syncOperation: syncOperation ?? this.syncOperation, ); } }