import 'package:flutter/material.dart'; import 'package:hive_ce/hive.dart'; import '../../domain/entities/app_settings.dart'; import '../../../../core/constants/storage_constants.dart'; import '../../../../core/constants/app_constants.dart'; part 'app_settings_model.g.dart'; @HiveType(typeId: StorageConstants.appSettingsTypeId) class AppSettingsModel extends HiveObject { @HiveField(0) final String themeModeString; @HiveField(1) final String language; @HiveField(2) final String currency; @HiveField(3) final double taxRate; @HiveField(4) final String storeName; @HiveField(5) final bool enableSync; @HiveField(6) final DateTime? lastSyncAt; AppSettingsModel({ required this.themeModeString, required this.language, required this.currency, required this.taxRate, required this.storeName, required this.enableSync, this.lastSyncAt, }); /// Convert to domain entity AppSettings toEntity() { ThemeMode themeMode; switch (themeModeString) { case 'light': themeMode = ThemeMode.light; break; case 'dark': themeMode = ThemeMode.dark; break; default: themeMode = ThemeMode.system; } return AppSettings( themeMode: themeMode, language: language, currency: currency, taxRate: taxRate, storeName: storeName, enableSync: enableSync, lastSyncAt: lastSyncAt, ); } /// Create from domain entity factory AppSettingsModel.fromEntity(AppSettings settings) { String themeModeString; switch (settings.themeMode) { case ThemeMode.light: themeModeString = 'light'; break; case ThemeMode.dark: themeModeString = 'dark'; break; default: themeModeString = 'system'; } return AppSettingsModel( themeModeString: themeModeString, language: settings.language, currency: settings.currency, taxRate: settings.taxRate, storeName: settings.storeName, enableSync: settings.enableSync, lastSyncAt: settings.lastSyncAt, ); } /// Create default settings factory AppSettingsModel.defaultSettings() { return AppSettingsModel( themeModeString: 'system', language: AppConstants.defaultLanguage, currency: AppConstants.defaultCurrency, taxRate: AppConstants.defaultTaxRate, storeName: AppConstants.appName, enableSync: true, lastSyncAt: null, ); } /// Create from ThemeMode factory AppSettingsModel.fromThemeMode(ThemeMode mode) { String themeModeString; switch (mode) { case ThemeMode.light: themeModeString = 'light'; break; case ThemeMode.dark: themeModeString = 'dark'; break; default: themeModeString = 'system'; } return AppSettingsModel( themeModeString: themeModeString, language: AppConstants.defaultLanguage, currency: AppConstants.defaultCurrency, taxRate: AppConstants.defaultTaxRate, storeName: AppConstants.appName, enableSync: true, lastSyncAt: null, ); } /// Get ThemeMode from string ThemeMode get themeMode { switch (themeModeString) { case 'light': return ThemeMode.light; case 'dark': return ThemeMode.dark; default: return ThemeMode.system; } } /// Create a copy with updated fields AppSettingsModel copyWith({ String? themeModeString, String? language, String? currency, double? taxRate, String? storeName, bool? enableSync, DateTime? lastSyncAt, }) { return AppSettingsModel( themeModeString: themeModeString ?? this.themeModeString, language: language ?? this.language, currency: currency ?? this.currency, taxRate: taxRate ?? this.taxRate, storeName: storeName ?? this.storeName, enableSync: enableSync ?? this.enableSync, lastSyncAt: lastSyncAt ?? this.lastSyncAt, ); } }