use anchor_lang::prelude::*;
use solana_program::instruction::Instruction;
use tulipv2_sdk_farms::Farm;
pub trait IssueShares {
fn authority(&self) -> Pubkey;
fn vault(&self) -> Pubkey;
fn deposit_tracking_account(&self) -> Pubkey;
fn deposit_tracking_pda(&self) -> Pubkey;
fn vault_pda(&self) -> Pubkey;
fn shares_mint(&self) -> Pubkey;
fn receiving_shares_account(&self) -> Pubkey;
fn depositing_underlying_account(&self) -> Pubkey;
fn vault_underlying_account(&self) -> Pubkey;
fn instruction(&self, farm_type: Farm, amount: u64) -> Option<Instruction>;
fn ix_data(&self) -> Option<[u8; 8]>;
fn to_account_meta(&self, _is_signer: Option<bool>) -> Vec<AccountMeta>;
}
pub trait RegisterDepositTracking {
fn authority(&self) -> Pubkey;
fn vault(&self) -> Pubkey;
fn deposit_tracking_account(&self) -> Pubkey;
fn deposit_tracking_pda(&self) -> Pubkey;
fn deposit_tracking_queue_account(&self) -> Pubkey;
fn deposit_tracking_hold_account(&self) -> Pubkey;
fn shares_mint(&self) -> Pubkey;
fn underlying_mint(&self) -> Pubkey;
fn instruction(&self, farm_type: Farm) -> Option<Instruction>;
fn ix_data(&self) -> Option<[u8; 8]>;
fn to_account_meta(&self, _is_signer: Option<bool>) -> Vec<AccountMeta>;
}
pub trait WithdrawDepositTracking {
fn authority(&self) -> Pubkey;
fn vault(&self) -> Pubkey;
fn deposit_tracking_account(&self) -> Pubkey;
fn deposit_tracking_pda(&self) -> Pubkey;
fn deposit_tracking_hold_account(&self) -> Pubkey;
fn shares_mint(&self) -> Pubkey;
fn receiving_shares_account(&self) -> Pubkey;
fn instruction(&self, amount: u64, farm_type: Farm) -> Option<Instruction>;
fn ix_data(&self) -> Option<[u8; 8]>;
fn to_account_meta(&self, _is_signer: Option<bool>) -> Vec<AccountMeta>;
}