// Immutable adatosztály — az eszköz összes statikus adata.
// A DeviceIdentityService tölti be egyszer induláskor.

class DeviceInfoModel {
  // ── Azonosítók ────────────────────────────────────────────────────

  /// Android rendszerszintű egyedi azonosító.
  /// Reinstall után megmarad, factory reset után változik.
  final String deviceId;

  /// App-példány UUID — FlutterSecureStorage-ban tárolva.
  /// Reinstall után új értéket kap.
  final String appInstanceId;

  // Android vagy IOS
  final String platform;

  // ── Hardver ───────────────────────────────────────────────────────

  final String manufacturer; // "Samsung"
  final String model; // "Galaxy Tab S9 Ultra"
  final String brand; // "samsung"

  // ── Rendszer ──────────────────────────────────────────────────────

  /// Felhasználó által adott eszköznév (pl. "Pista telefonja").
  /// A Settings.Global.DEVICE_NAME értéke — ez az alapértelmezett label.
  final String systemDeviceName;

  final String osVersion; // "14"
  final int sdkInt; // 34
  final String securityPatch; // "2024-06-01"

  // ── App ───────────────────────────────────────────────────────────

  final String appVersion; // "1.0.0"
  final String buildNumber; // "15"

  const DeviceInfoModel({
    required this.deviceId,
    required this.appInstanceId,
    required this.platform,
    required this.manufacturer,
    required this.model,
    required this.brand,
    required this.systemDeviceName,
    required this.osVersion,
    required this.sdkInt,
    required this.securityPatch,
    required this.appVersion,
    required this.buildNumber,
  });

  // ── Supabase regisztrációs map ────────────────────────────────────

  Map<String, dynamic> toRegistrationMap({required String label}) => {
        'device_id': deviceId,
        'app_instance_id': appInstanceId,
        'platform': platform,
        'label': label,
        'manufacturer': manufacturer,
        'model': model,
        'os_version': osVersion,
        'sdk_int': sdkInt,
        'security_patch': securityPatch,
        'app_version': '$appVersion+$buildNumber',
        'last_seen': DateTime.now().toIso8601String(),
      };

  @override
  String toString() =>
      'DeviceInfo($manufacturer $model, Android $osVersion, app $appVersion)';
}
