// Application imports
import { AccountDetails } from '@app/_models/account';

/** Conversion object interface */
interface Conversion {
  /** Final transaction token information. */
  destinationToken: TxToken;
  /** Initial transaction token amount. */
  fromValue: number;
  /** Initial transaction token information. */
  sourceToken: TxToken;
  /** Final transaction token amount. */
  toValue: number;
  /** Address of the initiator of the conversion. */
  trader: string;
  /** Conversion mining information. */
  tx: Tx;
  /** Account information of the initiator of the conversion. */
  user: AccountDetails;
}

/** Transaction object interface */
interface Transaction {
  /** Address of the transaction sender. */
  from: string;
  /** Account information of the transaction recipient. */
  recipient: AccountDetails;
  /** Account information of the transaction sender. */
  sender: AccountDetails;
  /** Address of the transaction recipient. */
  to: string;
  /** Transaction token information. */
  token: TxToken;
  /** Transaction mining information. */
  tx: Tx;
  /** Type of transaction. */
  type?: string;
  /** Amount of tokens transacted. */
  value: number;
}

/** Transaction data interface */
interface Tx {
  /** Transaction block number. */
  block: number;
  /** Transaction mining status. */
  success: boolean;
  /** Time transaction was mined. */
  timestamp: number;
  /** Hash generated by transaction. */
  txHash: string;
  /** Index of transaction in block. */
  txIndex: number;
}

/** Transaction token object interface */
interface TxToken {
  /** Address of the deployed token contract. */
  address: string;
  /** Name of the token. */
  name: string;
  /** The unique token symbol. */
  symbol: string;
}

/** @exports */
export { Conversion, Transaction, Tx, TxToken };
