
export type HavenTicker = "XHV" | "XUSD" | "XBTC" | "XEUR" | "XAU" | "XAG" | "XCNY" | "XGBP" | "XAUD" | "XCHF"
export type AmountPerAsset = Record<HavenTicker, string>;


export type SerializedTransaction = {

  fromAmount: string;
  toAmount: string;
  from_asset_type: HavenTicker;
  to_asset_type: HavenTicker;
  height: number;
  timestamp: string;
  mempool: boolean;
  hash: string;
  coinbase: boolean;
  total_received:Record<HavenTicker, string>;
  total_sent: Record<HavenTicker, string>;

}

export type HavenTransferParams = {
  sending_amount: string
  is_sweeping: boolean
  payment_id_string?: string
  from_address_string: string
  to_address_string: string
  sec_viewKey_string: string
  sec_spendKey_string: string
  pub_spendKey_string: string
  nettype: number
  memo_string?: string
  from_asset_type: HavenTicker
  to_asset_type: HavenTicker
  priority: string
  unlock_time: number
  blockchain_height:number
  pricing_record?:any,
  get_unspent_outs_fn: (req: unknown, callBack: (errMessage: string | null, response: unknown) => void) => void
  get_random_outs_fn: (req: unknown, callBack: (errMessage: string | null, response: unknown) => void) => void
  submit_raw_tx_fn: (req: unknown, callBack: (errMessage: string | null, response: unknown) => void) => void
  status_update_fn: (params: any) => void
  error_fn: (params: any) => void
  success_fn: (params: any) => void
}

export type HavenTransferResponse = {
  mixin: number
  total_sent: string
  final_payment_id: string
  tx_hash: string
  tx_fee: string
  tx_key: string
  tx_pub_key: string
}

export type KeysFromMnemonic = {
  sec_seed_string: string
  mnemonic_language: string
  address_string: string
  pub_viewKey_string: string
  sec_viewKey_string: string
  pub_spendKey_string: string
  sec_spendKey_string: string
}

export type FeeEstimationParams = {
  use_per_byte_fee: boolean,
  use_rct: boolean,
  n_inputs: number,
  mixin: number,
  n_outputs: number,
  extra_size: number,
  bulletproof: boolean,
  base_fee: number,
  fee_quantization_mask: number,
  priority: number,
  fork_version: number,
  clsag: boolean
}
export interface ApiRandomOutsResponse {
  amount_outs: Array<AmountOuts>
}
export interface AmountOuts {
  amount: string;
  outputs: Array<RandomOut>;
}
export interface RandomOut {
  asset_index: number;
  global_index: number;
  public_key: string;
  rct: string;
}
export interface ApiUnspentOutsResponse {
  amount: string;
  fork_version: number;
  new_address: boolean;
  outputs: Array<UnspentOut>;
  per_byte_fee: number;
  status: string;
}
export interface UnspentOut {
  amount: string;
  asset_index: number;
  asset_type: string;
  global_index: number;
  height: number;
  index: number;
  public_key: string;
  rct: string;
  spend_key_images: Array<string>
  timestamp: number;
  tx_hash: string;
  tx_id: number;
  tx_prefix_hash: string;
  tx_pub_key: string;
}
export interface ApiAddressInfoResponse {
  blockchain_height: number;
  locked_funds: string;
  new_address: boolean;
  scanned_block_height: number;
  scanned_block_timestamp: number;
  scanned_height: number;
  spent_outputs: Array<UnspentOut>;
  start_height: number;
  status: string;
  total_received: Record<HavenTicker, string>;
  total_received_unlocked: Record<HavenTicker, string>;
  total_sent: Record<HavenTicker, string>;
}

export interface ApiAddressTxsResponse {
  blockchain_height: number;
  new_address: boolean;
  scanned_block_height: number;
  scanned_block_timestamp: number;
  scanned_height: number;
  start_height: number;
  status: string;
  total_received: Record<HavenTicker, string>;
  total_received_unlocked: Record<HavenTicker, string>;
  transactions: Array<TransactionEntryResponse>;
}

export interface TransactionEntryResponse {
  coinbase: boolean;
  from_asset_type: string;
  hash: string;
  height: number;
  id: number;
  mempool: boolean;
  mixin: number;
  payment_id: string;
  timestamp: number;
  to_asset_type: string;
  total_received: Record<HavenTicker, string>;
  total_sent: Record<HavenTicker, string>;
  tx_pub_key: string;
}

export interface ApiTxResponse {
  coinbase: boolean;
  error: string;
  fee: number;
  from_asset_type: string;
  mixin_no: number;
  no_confirmations: number;
  num_of_inputs: number;
  num_of_outputs: number;
  payment_id: string;
  pub_key: string;
  rct_type: number;
  size: number;
  status: string;
  timestamp: number;
  to_asset_type: string;
  total_received: Record<HavenTicker, string>;
  total_sent: Record<HavenTicker, string>;
  hash: string;
  tx_height: number;
  tx_version: number;
  xmr_inputs: number;
  xmr_outputs: number;
}
export interface ApiVersionResponse {
  api: number;
  blockchain_height: number;
  fork_version: number;
  git_branch_name: string;
  last_git_commit_date: string;
  last_git_commit_hash: string;
  monero_version_full: string;
  network_type: number;
  per_byte_fee: number;
  testnet: boolean;
}
export interface ApiLoginResponse {
  generated_locally: boolean;
  new_address: boolean;
  start_height: number;
  status: string;
}

export interface ApiPingResponse {
  status: string;
}







