import 'package:equatable/equatable.dart'; class DerivativeItemModel extends Equatable { final String isin; final String name; final String optionType; final String productCategoryName; final String nextGenProductCategoryName; final double strike; final double barrier; final double leverage; final double? size; final double? factor; final double? delta; final String currency; final String? expiry; final String issuer; final String issuerDisplayName; final String? issuerImageId; final String underlyingIsin; const DerivativeItemModel({ required this.isin, this.name = '', this.optionType = 'Long', this.productCategoryName = '', this.nextGenProductCategoryName = '', this.strike = 0.0, this.barrier = 0.0, this.leverage = 1.0, this.size, this.factor, this.delta, this.currency = 'EUR', this.expiry, this.issuer = '', this.issuerDisplayName = '', this.issuerImageId, this.underlyingIsin = '', }); bool get isLong => optionType.toLowerCase().contains('long') || optionType.toLowerCase().contains('call'); double distanceToBarrier(double currentUnderlyingPrice) { if (barrier <= 0 || currentUnderlyingPrice <= 0) return 0.0; return ((currentUnderlyingPrice - barrier).abs() / currentUnderlyingPrice) * 100.0; } factory DerivativeItemModel.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; } double? parseOptDbl(dynamic val) { if (val == null) return null; if (val is num) return val.toDouble(); return double.tryParse(val.toString()); } return DerivativeItemModel( isin: json['isin']?.toString() ?? '', name: json['name']?.toString() ?? '', optionType: json['optionType']?.toString() ?? 'Long', productCategoryName: json['productCategoryName']?.toString() ?? '', nextGenProductCategoryName: json['nextGenProductCategoryName']?.toString() ?? '', strike: parseDbl(json['strike']), barrier: parseDbl(json['barrier']), leverage: parseDbl(json['leverage']), size: parseOptDbl(json['size']), factor: parseOptDbl(json['factor']), delta: parseOptDbl(json['delta']), currency: json['currency']?.toString() ?? 'EUR', expiry: json['expiry']?.toString(), issuer: json['issuer']?.toString() ?? '', issuerDisplayName: json['issuerDisplayName']?.toString() ?? (json['issuer']?.toString() ?? ''), issuerImageId: json['issuerImageId']?.toString(), underlyingIsin: json['underlyingIsin']?.toString() ?? '', ); } @override List get props => [ isin, name, optionType, productCategoryName, strike, barrier, leverage, issuer, underlyingIsin, ]; }