class PriceData { final String id; final String platform; final String sellerName; final double pricePerMillion; final DateTime timestamp; final String? url; PriceData({ required this.id, required this.platform, required this.sellerName, required this.pricePerMillion, required this.timestamp, this.url, }); factory PriceData.fromJson(Map json) { return PriceData( id: json['id'] as String, platform: json['platform'] as String, sellerName: (json['sellerName'] as String?) ?? 'Unknown', pricePerMillion: (json['pricePerMillion'] as num).toDouble(), timestamp: DateTime.parse(json['timestamp'] as String), url: json['url'] as String?, ); } Map toJson() { return { 'id': id, 'platform': platform, 'sellerName': sellerName, 'pricePerMillion': pricePerMillion, 'timestamp': timestamp.toIso8601String(), 'url': url, }; } } class LatestPrice { final double lowestPrice; final String sellerName; final String platform; final List allPrices; final DateTime timestamp; LatestPrice({ required this.lowestPrice, required this.sellerName, required this.platform, required this.allPrices, required this.timestamp, }); factory LatestPrice.fromJson(Map json) { final data = json['data'] as Map; return LatestPrice( lowestPrice: (data['lowestPrice'] as num).toDouble(), sellerName: data['sellerName'] as String, platform: data['platform'] as String, allPrices: (data['allPrices'] as List) .map((e) => PriceData.fromJson(e as Map)) .toList(), timestamp: DateTime.parse(data['timestamp'] as String), ); } } class HistoryData { final List prices; HistoryData({required this.prices}); factory HistoryData.fromJson(Map json) { return HistoryData( prices: (json['data'] as List) .map((e) => HistoryPrice.fromJson(e as Map)) .toList(), ); } } class HistoryPrice { final DateTime timestamp; final double price; final String vendor; final String seller; HistoryPrice({ required this.timestamp, required this.price, required this.vendor, required this.seller, }); factory HistoryPrice.fromJson(Map json) { return HistoryPrice( timestamp: DateTime.parse(json['timestamp'] as String), price: double.parse(json['price'] as String), vendor: json['vendor'] as String, seller: json['seller'] as String, ); } // Convert to PriceData for compatibility PriceData toPriceData() { return PriceData( id: '${timestamp.millisecondsSinceEpoch}-$seller', platform: vendor, sellerName: seller, pricePerMillion: price, timestamp: timestamp, ); } } class PriceAlert { final String id; final double auecAmount; final double maxPrice; final bool enabled; PriceAlert({ required this.id, required this.auecAmount, required this.maxPrice, required this.enabled, }); factory PriceAlert.fromJson(Map json) { return PriceAlert( id: json['id'] as String, auecAmount: (json['auecAmount'] as num).toDouble(), maxPrice: (json['maxPrice'] as num).toDouble(), enabled: json['enabled'] as bool, ); } Map toJson() { return { 'id': id, 'auecAmount': auecAmount, 'maxPrice': maxPrice, 'enabled': enabled, }; } PriceAlert copyWith({ String? id, double? auecAmount, double? maxPrice, bool? enabled, }) { return PriceAlert( id: id ?? this.id, auecAmount: auecAmount ?? this.auecAmount, maxPrice: maxPrice ?? this.maxPrice, enabled: enabled ?? this.enabled, ); } }