import type { Wallet } from '@saberhq/solana-contrib';
import type { AccountMeta, Connection, Transaction } from '@solana/web3.js';

import { withFindOrInitAssociatedTokenAccount } from '../../utils/withFindOrInitAssociatedTokenAccount';
import type { BlazeData } from './constants';

export const withRemainingAccountsForRedeem = async (
  transaction: Transaction,
  connection: Connection,
  wallet: Wallet,
  { tokenMint, treasury }: Pick<BlazeData, 'tokenMint' | 'treasury'>
) => {
  const res: AccountMeta[] = [];
  if (tokenMint) {
    const signerTokenAccount = await withFindOrInitAssociatedTokenAccount(
      transaction,
      connection,
      tokenMint,
      wallet.publicKey,
      wallet.publicKey
    );
    res.push(
      {
        isSigner: false,
        isWritable: false,
        pubkey: tokenMint
      },
      {
        isSigner: false,
        isWritable: true,
        pubkey: signerTokenAccount
      }
    );
  } else if (treasury) {
    res.push({
      isSigner: false,
      isWritable: true,
      pubkey: treasury
    });
  }
  return res;
};
