import 'package:pshared/data/dto/wallet/balance.dart';
import 'package:pshared/data/dto/wallet/wallet.dart';
import 'package:pshared/data/mapper/money.dart';
import 'package:pshared/data/mapper/wallet/asset.dart';
import 'package:pshared/data/mapper/wallet/balance.dart';
import 'package:pshared/models/describable.dart';
import 'package:pshared/models/wallet/wallet.dart';


extension WalletDTOMapper on WalletDTO {
  WalletModel toDomain({WalletBalanceDTO? balance}) => WalletModel(
    walletRef: walletRef,
    organizationRef: organizationRef,
    ownerRef: ownerRef,
    asset: asset.toDomain(),
    depositAddress: depositAddress,
    status: status,
    metadata: metadata,
    createdAt: (createdAt == null || createdAt!.isEmpty)
        ? null
        : DateTime.tryParse(createdAt!),
    updatedAt: (updatedAt == null || updatedAt!.isEmpty)
        ? null
        : DateTime.tryParse(updatedAt!),
    balance: balance?.toDomain(),
    availableMoney: balance?.available?.toDomain(),
    describable: newDescribable(
      name: name.isNotEmpty ? name : (metadata?['name']?.toString() ?? ''),
      description: (description != null && description!.isNotEmpty)
          ? description
          : metadata?['description'],
    ),
  );
}
