import { PublicClient, WalletClient } from 'viem';

export interface IStargateChain {
    chainId: number;
    chainName: string;
    network?: string;
}
export interface IStargateParams {
    dstEid: number;
    to: `0x${string}`;
    amountLD: bigint;
    minAmountLD: bigint;
    extraOptions: `0x${string}`;
    composeMsg: `0x${string}`;
    oftCmd: `0x${string}`;
}
export interface IStargateQuoteSend {
    nativeFee: bigint;
    lzTokenFee: bigint;
}
export interface IStargateBusDriveSettings {
    avgWaitTime: number;
    maxWaitTime: number;
    passengersToDrive: number;
}
export interface IStargateQuoteOFT {
    publicClient: PublicClient;
    bridgeAddress: `0x${string}`;
    endPointId: number;
    receiver: `0x${string}`;
    amount: bigint;
}
export interface IStargateOFTQuote {
    publicClient: PublicClient;
    bridgeAddress: `0x${string}`;
    endPointId: number;
    receiver: `0x${string}`;
    amount: bigint;
    minAmount: bigint;
}
export interface ISendTokenInput {
    walletClient: WalletClient;
    publicClient: PublicClient;
    bridgeAddress: `0x${string}`;
    tokenAddress: `0x${string}`;
    endPointId: number;
    receiver: `0x${string}`;
    amount: bigint;
}
export interface IStargateTokenValidateParams {
    fromBridgeAddress: `0x${string}`;
    toBridgeAddress: `0x${string}`;
    fromTokenAddress: `0x${string}`;
    fromTokenSymbol: string;
    fromTokenDecimals: number;
    fromChainId?: number;
    toTokenAddress: `0x${string}`;
    toTokenSymbol: string;
    toTokenDecimals: number;
    toChainId?: number;
    amount: number;
    toPublicClient: PublicClient;
    fromPublicClient: PublicClient;
    dstEndpointId: number;
    stargateEndpoint: string;
}
export interface IStargateBridgeTokenInfo {
    stargateType: string;
    address: `0x${string}`;
    token: {
        address: `0x${string}`;
        decimals: number;
        symbol: string;
    };
    lpToken: {
        address: `0x${string}`;
        decimals: number;
        symbol: string;
    };
    farm: {
        stargateStaking: {
            address: `0x${string}`;
            rewardTokens: [
                {
                    address: `0x${string}`;
                    decimals: number;
                    symbol: string;
                },
                {
                    address: `0x${string}`;
                    decimals: number;
                    symbol: string;
                }
            ];
        };
    };
    id: string;
    assetId: string;
    chainKey: string;
    chainName: string;
    chainId: number;
    tokenMessaging: `0x${string}`;
    sharedDecimals: number;
}
export interface IStargateTokenList {
    v1: IStargateBridgeTokenInfo[];
    v2: IStargateBridgeTokenInfo[];
}
export interface IStargateToken extends IStargateBridgeTokenInfo {
    endpointID?: number;
}
export type IStargateTransferConfig = IStargateToken[];
