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

// Local imports
import { AgentsProgram } from "../idl/types";
import { getEventAuthority, getFeesVault } from "../utils/programAccounts";


export async function createAgentIx(params: {
    payer: PublicKey,
    program: Program<AgentsProgram>,
    agentUuid: number[],
    agentAddress: PublicKey,
    agentState: PublicKey,
}): Promise<TransactionInstruction> {
    const { program, agentUuid, agentAddress, agentState, payer } = params;

    let feesVault = getFeesVault(program);
    let eventAuthority = getEventAuthority(program);
    
    const ix = program.methods.createAgent(agentUuid)
        .accountsStrict({
            creator: payer,
            agent: agentAddress,
            agentState,
            feesVault,
            authority: PublicKey.default,
            rent: SYSVAR_RENT_PUBKEY,
            systemProgram: SystemProgram.programId,
            eventAuthority,
            program: program.programId,
        })
        .instruction();

    return ix;
}
