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

// Local imports
import { BasketsProgram } from "../../idl/types";
import { fetchBasketState } from "../../state/basket";


export async function overwriteLookupTableIx(params: {
    program: Program<BasketsProgram>;
    manager: PublicKey;
    basket: PublicKey;
}): Promise<TransactionInstruction> {
    const { program, manager } = params;
    const basketState = await fetchBasketState(program, params.basket);
    const basketPda = basketState.basketPda;
    const oldLookupTable1 = basketState.lookupTable1;
    const oldLookupTable2 = basketState.lookupTable2;
    const otherLookupTable1 = basketState.otherLookupTable1;
    const otherLookupTable2 = basketState.otherLookupTable2;
    const ix = await program.methods
        .overwriteLookupTable()
        .accountsStrict({
            manager,
            basket: params.basket,
            basketPda,
            oldLookupTable1,
            oldLookupTable2,
            otherLookupTable1,
            otherLookupTable2,
            systemProgram: SystemProgram.programId,
        })
        .instruction();

    return ix;
}
