// Core dependencies
import { Program } from "@coral-xyz/anchor";
import { AddressLookupTableProgram, PublicKey, SystemProgram, TransactionInstruction } from "@solana/web3.js";

// Local imports
import { BasketsProgram } from "../../idl/types";
import { fetchDeactivatedLookupTable } from "../../state/lut";
import { getBasketPda } from "../../utils/programAccounts";


export async function overwriteLookupTableIx(params: {
    program: Program<BasketsProgram>;
    deactivatedLookupTable: PublicKey;
}): Promise<TransactionInstruction> {
    const { program } = params;
    const deactivatedState = await fetchDeactivatedLookupTable(program, params.deactivatedLookupTable);
    const basket = deactivatedState.authority;
    const basketPda = getBasketPda(basket);
    const recipient = deactivatedState.recipient;
    const ix = await program.methods
        .closeLookupTable()
        .accountsStrict({
            recipient,
            basket,
            basketPda,
            lookupTable: deactivatedState.lookupTable,
            deactivatedLookupTable: params.deactivatedLookupTable,
            addressLookupTableProgram: AddressLookupTableProgram.programId,
            systemProgram: SystemProgram.programId,
        })
        .instruction();

    return ix;
}
