import { isSolanaWallet } from '@dynamic-labs/solana';

import { Connection, PublicKey, SystemProgram, TransactionMessage, VersionedTransaction, VersionedTransactionResponse } from "@solana/web3.js";

const { primaryWallet } = useDynamicContext();

if(!primaryWallet || !isSolanaWallet(primaryWallet)) {
  return;
}

const connection: Connection = await primaryWallet.getConnection();

const fromKey = new PublicKey(primaryWallet.address);
const toKey = new PublicKey(address);
const amountInLamports = Number(amount) * 1000000000;

const instructions = [
  SystemProgram.transfer({
    fromPubkey: fromKey,
    lamports: amountInLamports,
    toPubkey: toKey,
  }),
];

const blockhash = await connection.getLatestBlockhash();

// create v0 compatible message
const messageV0 = new TransactionMessage({
  instructions,
  payerKey: fromKey,
  recentBlockhash: blockhash.blockhash,
}).compileToV0Message();

const transferTransaction = new VersionedTransaction(messageV0);

const signer = await primaryWallet.getSigner();

await signer
  .signAndSendTransaction(transferTransaction)
  .then((res: any) => {
    console.log(
      `Transaction successful: https://solscan.io/tx/${res.signature}?cluster=devnet`,
    );
  })
  .catch((reason: any) => {
    console.error(reason);
  });