use crate::{
tools::{
deploy_collection, deploy_token, fetch_price, get_balance_other, get_wallet_address, gibwork,
helius::{create_webhook, delete_webhook, get_webhook, transaction_parsing},
jupiter::get_token_data_by_address,
launch_token_pumpfun, mint_nft, pyth_fetch_price, rugcheck,
solana::{close_empty_token_accounts, get_balance, get_tps, request_faucet_funds, transfer},
solayer::stake_with_solayer,
stake_with_jup, trade,
},
SolanaAgentKit,
};
use rig::tool::ToolSet;
use std::sync::Arc;
pub fn create_solana_tools(agent: SolanaAgentKit) -> ToolSet {
let agent = Arc::new(agent);
let builder = ToolSet::builder()
.dynamic_tool(deploy_collection::DeployCollection::new(agent.clone()))
.dynamic_tool(deploy_token::DeployToken::new(agent.clone()))
.dynamic_tool(fetch_price::FetchPrice::new())
.dynamic_tool(get_balance::GetBalance::new(agent.clone()))
.dynamic_tool(get_balance_other::GetBalanceOther::new(agent.clone()))
.dynamic_tool(get_tps::GetTps::new(agent.clone()))
.dynamic_tool(get_wallet_address::GetWalletAddress::new(agent.clone()))
.dynamic_tool(launch_token_pumpfun::LaunchPumpfunToken::new(agent.clone()))
.dynamic_tool(mint_nft::MintNFT::new(agent.clone()))
.dynamic_tool(pyth_fetch_price::FetchPricePyTh::new())
.dynamic_tool(request_faucet_funds::RequestFaucetFunds::new(agent.clone()))
.dynamic_tool(stake_with_jup::StakeWithJup::new(agent.clone()))
.dynamic_tool(trade::Trade::new(agent.clone()))
.dynamic_tool(transfer::Transfer::new(agent.clone()))
.dynamic_tool(rugcheck::token_report_summary::FetchTokenReportSummary::new())
.dynamic_tool(rugcheck::token_report_detailed::FetchTokenReportDetailed::new())
.dynamic_tool(gibwork::create_gibwork_task::CreateGibworkTask::new(agent.clone()))
.dynamic_tool(close_empty_token_accounts::CloseEmptyTokenAccounts::new(agent.clone()))
.dynamic_tool(stake_with_solayer::StakeWithSolayer::new(agent.clone()))
.dynamic_tool(get_token_data_by_address::GetTokenData::new())
.dynamic_tool(create_webhook::CreateWebHook::new(agent.clone()))
.dynamic_tool(delete_webhook::DeleteWebHook::new(agent.clone()))
.dynamic_tool(get_webhook::GetWebHook::new(agent.clone()))
.dynamic_tool(transaction_parsing::TransactionParse::new(agent.clone()));
builder.build()
}