use std::ops::Range;
use std::time::Duration;
use async_trait::async_trait;
use bytes::Bytes;
use xet_core_structures::merklehash::MerkleHash;
use xet_core_structures::xorb_object::XorbObject;
use super::super::interface::Client;
use crate::cas_types::{
FileRange, QueryReconstructionResponse, QueryReconstructionResponseV2, XorbReconstructionFetchInfo,
};
use crate::error::Result;
#[cfg_attr(not(target_family = "wasm"), async_trait)]
#[cfg_attr(target_family = "wasm", async_trait(?Send))]
pub trait DirectAccessClient: Client + Send + Sync {
fn set_fetch_term_url_expiration(&self, expiration: Duration);
fn set_api_delay_range(&self, delay_range: Option<Range<Duration>>);
fn set_max_ranges_per_fetch(&self, max_ranges: usize);
fn set_global_dedup_shard_expiration(&self, expiration: Option<Duration>);
fn disable_v2_reconstruction(&self, status_code: u16);
fn v2_disabled_status_code(&self) -> u16 {
0
}
async fn get_reconstruction_v1(
&self,
file_id: &MerkleHash,
bytes_range: Option<FileRange>,
) -> Result<Option<QueryReconstructionResponse>>;
async fn get_reconstruction_v2(
&self,
file_id: &MerkleHash,
bytes_range: Option<FileRange>,
) -> Result<Option<QueryReconstructionResponseV2>>;
async fn apply_api_delay(&self);
async fn list_xorbs(&self) -> Result<Vec<MerkleHash>>;
async fn delete_xorb(&self, hash: &MerkleHash);
async fn get_full_xorb(&self, hash: &MerkleHash) -> Result<Bytes>;
async fn get_xorb_ranges(&self, hash: &MerkleHash, chunk_ranges: Vec<(u32, u32)>) -> Result<Vec<Bytes>>;
async fn xorb_length(&self, hash: &MerkleHash) -> Result<u32>;
async fn xorb_exists(&self, hash: &MerkleHash) -> Result<bool>;
async fn xorb_footer(&self, hash: &MerkleHash) -> Result<XorbObject>;
async fn get_file_size(&self, hash: &MerkleHash) -> Result<u64>;
async fn get_file_data(&self, hash: &MerkleHash, byte_range: Option<FileRange>) -> Result<Bytes>;
async fn get_xorb_raw_bytes(&self, hash: &MerkleHash, byte_range: Option<FileRange>) -> Result<Bytes>;
async fn xorb_raw_length(&self, hash: &MerkleHash) -> Result<u64>;
async fn fetch_term_data(
&self,
hash: MerkleHash,
fetch_term: XorbReconstructionFetchInfo,
) -> Result<(Bytes, Vec<u32>)>;
}