use {
    crate::state::*, anchor_lang::prelude::*, hpl_hive_control::state::Project,
    hpl_utils::traits::Default, spl_account_compression::Noop,
};
#[derive(Accounts)]
pub struct InitStaker<'info> {
    #[account(has_one = project)]
    pub staking_pool: Account<'info, StakingPool>,
    #[account(
      init, payer = wallet,
      space = Staker::LEN,
      seeds = [
          b"staker",
          wallet.key().as_ref(),
          staking_pool.key().as_ref(),
      ],
      bump,
  )]
    pub staker: Account<'info, Staker>,
    #[account(mut)]
    pub wallet: Signer<'info>,
    pub system_program: Program<'info, System>,
    pub log_wrapper: Program<'info, Noop>,
    pub clock: Sysvar<'info, Clock>,
    #[account(address = anchor_lang::solana_program::sysvar::instructions::ID)]
    pub instructions_sysvar: AccountInfo<'info>,
    #[account()]
    pub project: Box<Account<'info, Project>>,
    #[account(mut)]
    pub vault: AccountInfo<'info>,
}
pub fn init_staker(ctx: Context<InitStaker>) -> Result<()> {
    let staker = &mut ctx.accounts.staker;
    staker.set_defaults();
    staker.bump = ctx.bumps["staker"];
    staker.staking_pool = ctx.accounts.staking_pool.key();
    staker.wallet = ctx.accounts.wallet.key();
    Event::new_staker(staker.key(), &staker, &ctx.accounts.clock)
        .wrap(ctx.accounts.log_wrapper.to_account_info())?;
    Ok(())
}