import { Side } from '../../spot/interface.mjs';
import { MarketIdOrName } from '../commonTypes.mjs';
import 'viem';
import '../contractTypes.mjs';

type CommitOrderSpot = {
    side: Side;
    size: number;
    slippageTolerance: number;
    minAmountReceived?: number;
    settlementStrategyId?: number;
    marketIdOrName: MarketIdOrName;
};
type Approve = {
    targetAddress: string;
    amount?: number;
    marketIdOrName: MarketIdOrName;
};
type GetOrder = {
    asyncOrderId: number;
    marketIdOrName: MarketIdOrName;
    fetchSettlementStrategy?: boolean;
};
type GetSettlementStrategy = {
    settlementStrategyId: number;
    marketIdOrName: MarketIdOrName;
};
type GetSettlementStrategies = {
    settlementStrategyId: number;
    marketIds: number[];
};
interface SettlementStrategyResponse {
    strategyType?: number;
    settlementDelay?: bigint;
    settlementWindowDuration?: bigint;
    priceVerificationContract?: string;
    feedId?: string;
    url?: string;
    settlementReward?: bigint;
    priceDeviationTolerance?: bigint;
    minimumUsdExchangeAmount?: bigint;
    maxRoundingLoss?: bigint;
    disabled?: boolean;
}
type AtomicOrder = {
    side: Side;
    size: number;
    slippageTolerance: number;
    marketIdOrName: MarketIdOrName;
    minAmountReceived?: number;
};
type Wrap = {
    size: number;
    marketIdOrName: MarketIdOrName;
};
type SettleOrder = {
    asyncOrderId: number;
    marketIdOrName: MarketIdOrName;
};

export type { Approve, AtomicOrder, CommitOrderSpot, GetOrder, GetSettlementStrategies, GetSettlementStrategy, SettleOrder, SettlementStrategyResponse, Wrap };
