import 'dart:typed_data';
import 'package:flutter/foundation.dart';
import 'package:bitcoin_flutter/bitcoin_flutter.dart' as bitcoin;
import 'package:bitcoin_flutter/src/payments/index.dart' show PaymentData;
import 'package:hex/hex.dart';

bitcoin.PaymentData generatePaymentData(
        {@required bitcoin.HDWallet hd, @required int index}) =>
    PaymentData(
        pubkey: Uint8List.fromList(HEX.decode(hd.derive(index).pubKey)));

bitcoin.ECPair generateKeyPair(
        {@required bitcoin.HDWallet hd,
        @required int index,
        bitcoin.NetworkType network}) =>
    bitcoin.ECPair.fromWIF(hd.derive(index).wif, network: network);

String generateP2WPKHAddress(
        {@required bitcoin.HDWallet hd,
        @required int index,
        bitcoin.NetworkType networkType}) =>
    bitcoin
        .P2WPKH(
            data: PaymentData(
                pubkey:
                    Uint8List.fromList(HEX.decode(hd.derive(index).pubKey))),
            network: networkType)
        .data
        .address;

String generateP2WPKHAddressByPath(
        {@required bitcoin.HDWallet hd,
        @required String path,
        bitcoin.NetworkType networkType}) =>
    bitcoin
        .P2WPKH(
            data: PaymentData(
                pubkey:
                    Uint8List.fromList(HEX.decode(hd.derivePath(path).pubKey))),
            network: networkType)
        .data
        .address;

String generateP2PKHAddress(
        {@required bitcoin.HDWallet hd,
        @required int index,
        bitcoin.NetworkType networkType}) =>
    bitcoin
        .P2PKH(
            data: PaymentData(
                pubkey:
                    Uint8List.fromList(HEX.decode(hd.derive(index).pubKey))),
            network: networkType)
        .data
        .address;