import { ActorSubclass } from '@dfinity/agent';
import { Principal } from '@dfinity/principal';
import { Metadata } from '../../interfaces/token';
import { BurnResult } from '../../interfaces/xtc';
import { TxnResult } from '../../interfaces/drc_20';
import { Result } from '../../interfaces/dip_20';
import { BaseMethodsExtendedActor } from '../../utils/actorFactory';
interface TimeStamp {
    timestamp_nanos: bigint;
}
export interface SendOpts {
    fee?: bigint;
    memo?: string;
    from_subaccount?: number;
    to_subaccount?: Uint8Array | number[];
    created_at_time?: TimeStamp;
}
export declare type SendResponse = {
    height: string;
} | {
    amount: string;
} | {
    transactionId: string;
};
export interface SendParams {
    to: string;
    from: string;
    amount: bigint;
    opts?: any;
}
export interface BurnParams {
    to: Principal;
    amount: string;
}
export interface ApproveParams {
    spender: Principal;
    amount: bigint;
    nonce?: bigint;
}
export interface BalanceResponse {
    value: string;
    decimals: number;
    error?: string;
}
export declare type ApproveResponse = Result | TxnResult;
interface AddedMehtodsToken {
    send: ({ to, from, amount }: SendParams) => Promise<SendResponse>;
    getMetadata: () => Promise<Metadata>;
    getBalance: (user: Principal) => Promise<BalanceResponse>;
    burnXTC: ({ to, amount }: BurnParams) => Promise<BurnResult>;
    getDecimals: () => Promise<number>;
    approve: ({ spender, amount, nonce, }: ApproveParams) => Promise<ApproveResponse>;
}
export declare type TokenServiceExtended<T> = BaseMethodsExtendedActor<T> & AddedMehtodsToken;
export interface InternalTokenMethods {
    send: (actor: ActorSubclass<any>, { to, from, amount }: SendParams) => Promise<SendResponse>;
    getMetadata: (actor: ActorSubclass<any>) => Promise<Metadata>;
    getBalance: (actor: ActorSubclass<any>, user: Principal) => Promise<BalanceResponse>;
    burnXTC: (actor: ActorSubclass<any>, { to, amount }: BurnParams) => Promise<BurnResult>;
    getDecimals: (actor: ActorSubclass<any>) => Promise<number>;
    approve: (actor: ActorSubclass<any>, { spender, amount, nonce }: ApproveParams) => Promise<Result | TxnResult>;
}
export declare const getDecimalsFromMetadata: (metadata: Metadata) => number;
export declare const parseAmountToSend: (amount: string, decimals: number) => bigint;
declare const _default: InternalTokenMethods;
export default _default;
