import 'package:flutter/foundation.dart';
import 'package:cake_wallet/entities/wallet_info.dart';
import 'package:cake_wallet/core/pending_transaction.dart';
import 'package:cake_wallet/core/transaction_history.dart';
import 'package:cake_wallet/entities/currency_for_wallet_type.dart';
import 'package:cake_wallet/entities/transaction_priority.dart';
import 'package:cake_wallet/entities/crypto_currency.dart';
import 'package:cake_wallet/entities/sync_status.dart';
import 'package:cake_wallet/entities/node.dart';
import 'package:cake_wallet/entities/wallet_type.dart';

abstract class WalletBase<BalaceType> {
  WalletBase(this.walletInfo);

  static String idFor(String name, WalletType type) =>
      walletTypeToString(type).toLowerCase() + '_' + name;

  WalletInfo walletInfo;

  WalletType get type => walletInfo.type;

  CryptoCurrency get currency => currencyForWalletType(type);

  String get id => walletInfo.id;

  String get name => walletInfo.name;

  String get address;

  set address(String address);

  BalaceType get balance;

  SyncStatus get syncStatus;

  set syncStatus(SyncStatus status);

  String get seed;

  Object get keys;

  TransactionHistoryBase transactionHistory;

  Future<void> connectToNode({@required Node node});

  Future<void> startSync();

  Future<PendingTransaction> createTransaction(Object credentials);

  double calculateEstimatedFee(TransactionPriority priority);

  Future<void> save();

  Future<void> rescan({int height});

  void close();
}