//!
//! This file contains most common imports that
//! are used internally in the wallet framework core.
//!

pub use crate::account::descriptor::{AccountDescriptor, AccountDescriptorProperty};
pub use crate::account::variants::*;
pub use crate::account::{Account, AccountKind, DerivationCapableAccount};
pub use crate::deterministic::*;
pub use crate::encryption::{Encryptable, EncryptionKind};
pub use crate::error::Error;
pub use crate::events::{EventKind, Events, SyncState};
pub use crate::factory::{factories, Factory};
pub use crate::metrics::{MetricsUpdate, MetricsUpdateKind};
pub use crate::result::Result;
pub use crate::rpc::Rpc;
pub use crate::rpc::{DynRpcApi, RpcCtl};
pub use crate::serializer::*;
pub use crate::storage::*;
pub use crate::utxo::balance::Balance;
pub use crate::utxo::scan::{Scan, ScanExtent};
pub use crate::utxo::{Maturity, NetworkParams, OutgoingTransaction, UtxoContext, UtxoEntryReference, UtxoProcessor};
pub use crate::wallet::*;
pub use crate::{storage, utils};

pub use ahash::{AHashMap, AHashSet};
pub use async_std::sync::{
    Mutex as AsyncMutex, MutexGuard as AsyncMutexGuard, RwLock as AsyncRwLock, RwLockReadGuard as AsyncRwLockReadGuard,
};
pub use async_trait::async_trait;
pub use borsh::{BorshDeserialize, BorshSerialize};
pub use cfg_if::cfg_if;
pub use dashmap::{DashMap, DashSet};
pub use downcast::{downcast_sync, AnySync};
pub use futures::future::join_all;
pub use futures::{select, select_biased, FutureExt, Stream, StreamExt, TryStreamExt};
pub use js_sys::{Array, BigInt, Object};
pub use kaspa_addresses::{Address, Prefix};
pub use kaspa_consensus_core::network::{NetworkId, NetworkType};
pub use kaspa_consensus_core::tx::{ScriptPublicKey, TransactionId, TransactionIndexType};
pub use kaspa_metrics_core::{Metric, Metrics, MetricsSnapshot};
pub use kaspa_utils::hashmap::*;
pub use kaspa_utils::hex::{FromHex, ToHex};
pub use kaspa_wallet_keys::secret::Secret;
pub use kaspa_wallet_keys::types::*;
pub use pad::PadStr;
pub use separator::Separatable;
pub use serde::{Deserialize, Deserializer, Serialize};
pub use std::collections::{HashMap, HashSet};
pub use std::pin::Pin;
pub use std::str::FromStr;
pub use std::sync::atomic::{AtomicBool, AtomicU64, AtomicUsize, Ordering};
pub use std::sync::LazyLock;
pub use std::sync::{Arc, Mutex, MutexGuard, RwLock};
pub use std::task::{Context, Poll};
pub use wasm_bindgen::prelude::*;
pub use workflow_core::prelude::*;
pub use workflow_core::seal;
pub use workflow_log::prelude::*;
pub use workflow_wasm::prelude::*;
pub use zeroize::*;

cfg_if! {
    if #[cfg(feature = "wasm32-sdk")] {
        pub use workflow_wasm::convert::CastFromJs;
    }
}

cfg_if! {
    if #[cfg(feature = "py-sdk")] {
        pub use kaspa_python_core::types::PyBinary;
        pub use pyo3::{
            exceptions::PyException,
            prelude::*,
            types::{PyDict, PyList},
        };
    }
}
