import 'package:equatable/equatable.dart'; /// Typed mirror of the fields the admin UI needs from /// `FinlyticCore.Dtos.TechnicalAnalysis.StrategyResultDto`, as returned by /// `GET /api/v1/admin/evaluations/watchlist/{isin}/history` — the last N /// technical-analysis setups computed for one ISIN, most recent first, so the /// score trend (improving/worsening, and whether it ever cleared the engine's /// top-pick bar) is visible even for setups too weak to ever reach the engine. class RecentSetupModel extends Equatable { final String strategyName; final double qualityScore; final bool isTopPick; final String rating; final DateTime createdAt; const RecentSetupModel({ required this.strategyName, required this.qualityScore, required this.isTopPick, required this.rating, required this.createdAt, }); factory RecentSetupModel.fromJson(Map json) { double parseDbl(dynamic val) { if (val == null) return 0.0; if (val is num) return val.toDouble(); return double.tryParse(val.toString()) ?? 0.0; } return RecentSetupModel( strategyName: json['strategyName']?.toString() ?? '', qualityScore: parseDbl(json['qualityScore']), isTopPick: json['isTopPick'] == true, rating: json['rating']?.toString() ?? '', createdAt: DateTime.tryParse(json['createdAt']?.toString() ?? '')?.toUtc() ?? DateTime.fromMillisecondsSinceEpoch(0, isUtc: true), ); } @override List get props => [strategyName, qualityScore, isTopPick, rating, createdAt]; }