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

// Local imports
import { BasketsProgram } from "../../idl/types";
import { PYTH_SPONSORED_FEEDS_STATE_SIZE } from "../../state/oracle";


export async function createPythSponsoredFeedsIxs(params: {
    program: Program<BasketsProgram>;
    payer: PublicKey;
    pythSponsoredFeeds: PublicKey;
}): Promise<TransactionInstruction[]> {
    // Destructure all params
    const { 
        program,
        payer,
        pythSponsoredFeeds,
    } = params;

    // Build and return instruction
    return [
        SystemProgram.createAccount({
            fromPubkey: payer,
            newAccountPubkey: pythSponsoredFeeds,
            space: 8 + PYTH_SPONSORED_FEEDS_STATE_SIZE,
            lamports: await program.provider.connection.getMinimumBalanceForRentExemption(8 + PYTH_SPONSORED_FEEDS_STATE_SIZE),
            programId: program.programId,
        }),
        await program.methods
            .createPythSponsoredFeeds()
            .accountsStrict({
                authority: payer,
                pythSponsoredFeeds,
                systemProgram: SystemProgram.programId,
                rent: SYSVAR_RENT_PUBKEY,
            })
            .instruction(),
    ];
}
