use crate::contract::state::tick::Tick;
use crate::contract::state::{Clmmpool, TickArray};
use borsh::BorshDeserialize;
use solana_client::rpc_client::RpcClient;
use solana_program::pubkey::Pubkey;
use std::ops::{Div, Sub};
pub fn get_tick_info(rpc_client: &RpcClient, tick_index: i32, pool: &Pubkey) -> Tick {
let clmmpool_info: Clmmpool = Clmmpool::get_info(rpc_client, pool);
let array_index = TickArray::array_index(tick_index, clmmpool_info.tick_spacing).unwrap();
println!("array_index: {:?}", array_index);
let tick_array_address = TickArray::find_address(pool, array_index);
println!("tick array address: {:?}", tick_array_address);
let data = rpc_client.get_account_data(&tick_array_address).unwrap();
let array_spacing = clmmpool_info.tick_spacing as usize * TickArray::CAP;
let start_tick_index =
Tick::min(clmmpool_info.tick_spacing) + (array_index as usize * array_spacing) as i32;
let tick_offset = tick_index
.sub(start_tick_index)
.div(clmmpool_info.tick_spacing as i32) as usize;
Tick::try_from_slice(&data[tick_offset * Tick::LEN + 44..(tick_offset + 1) * Tick::LEN + 44])
.unwrap()
}