import 'dart:convert'; import '../../../core/status.dart'; class Game { final int id; // DB id final int igdbId; final String name; final String? localizedTitle; final String? originalName; final ItemStatus status; final String? note; final String? summary; final String? coverUrl; final int? releaseYear; final bool locked; final Map? rawJson; Game({ required this.id, required this.igdbId, required this.name, this.localizedTitle, this.originalName, this.status = ItemStatus.Init, this.note, this.summary, this.coverUrl, this.releaseYear, this.locked = false, this.rawJson, }); factory Game.fromJson(Map j) { Map? parsedJson; final jsonString = j['json'] as String?; if (jsonString != null && jsonString.isNotEmpty) { try { parsedJson = Map.from( jsonDecode(jsonString) as Map); } catch (_) {} } return Game( id: (j['id'] as num).toInt(), igdbId: (j['igdb_id'] as num).toInt(), name: (j['name'] ?? '') as String, localizedTitle: j['loc_title'] as String?, originalName: j['original_name'] as String?, status: j['status'] != null ? statusFromString(j['status'] as String) : ItemStatus.Init, note: j['note'] as String?, summary: j['loc_summary'] as String?, coverUrl: j['cover_url'] as String?, releaseYear: (j['release_year'] as num?)?.toInt(), locked: ((j['loc_locked'] ?? j['locked'] ?? 0) as num?)?.toInt() == 1, rawJson: parsedJson, ); } String get displayName => (localizedTitle != null && localizedTitle!.isNotEmpty) ? localizedTitle! : name; }