import {
  PRIVATE_KEY_1,
  SAFE_ADDRESS_ORGANIZATION,
  SAFE_ADDRESS_USER,
} from "../config";
import Web3 from "web3";
import HDWalletProvider from "@truffle/hdwallet-provider";
import { tcToCrc } from "@circles/timecircles";
import { CirclesSdkWeb3Factory } from "@ingocollatz/sdk-web3-adapter";
import { SdkConfig } from "@ingocollatz/sdk";
import { CirclesSdkEthersFactory } from "@ingocollatz/sdk-ethers-adapter";
import { ethers } from "ethers";

(async (): Promise<void> => {
  // Ethers
  const provider = new ethers.providers.JsonRpcProvider(SdkConfig._rpcUrl);
  const signerAddress = new ethers.Wallet(PRIVATE_KEY_1, provider);

  const senderSafeAddress = SAFE_ADDRESS_USER;
  const recipientSafeAddress = SAFE_ADDRESS_ORGANIZATION;

  const tcAmount = "1";
  const crcAmount = tcToCrc(Date.now(), parseFloat(tcAmount));
  const mintAmountInWei = ethers.utils
    .parseUnits(crcAmount.toString(), 18)
    .toString();

  const circlesSdk = await CirclesSdkEthersFactory.withExistingSafe(
    ethers,
    signerAddress,
    senderSafeAddress
  );
  circlesSdk.transferUbi(
    senderSafeAddress,
    recipientSafeAddress,
    mintAmountInWei
  );

  // Web3
  // const web3 = new Web3();

  // const provider = new HDWalletProvider(
  //   {
  //     privateKeys: [PRIVATE_KEY_1.slice(2)],
  //     providerOrUrl: SdkConfig._rpcUrl,
  //   },
  // );

  // web3.setProvider(<any>provider);

  // const safeSigner = provider.getAddress();

  // const senderSafeAddress = SAFE_ADDRESS_USER;
  // const recipientSafeAddress = SAFE_ADDRESS_ORGANIZATION;

  // const tcAmount = "1";
  // const crcAmount = tcToCrc(Date.now(), parseFloat(tcAmount));
  // const mintAmountInWei = web3.utils.toWei(crcAmount.toString(), "ether")

  // const CirclesSdk = await CirclesSdkWeb3Factory.withExistingSafe(web3, safeSigner, senderSafeAddress);

  // CirclesSdk.transferUbi(senderSafeAddress, recipientSafeAddress, mintAmountInWei);

  // provider.engine.stop();
})();
