import { Address } from 'viem';

type PayDebtAndWithdraw = {
    accountId?: bigint;
    collateralIdOrName: number | string;
    collateralAmount: number;
    receiver: Address;
    minToReceive: number;
    path?: string;
    collateral: Address;
};
interface MarketSummary {
    marketId?: number;
    marketName?: string;
    feedId?: string;
    skew?: number;
    size?: number;
    maxOpenInterest?: number;
    interestRate?: number;
    indexPrice?: number;
    currentFundingRate?: number;
    currentFundingVelocity?: number;
}
interface MarketMetadata {
    marketName: string;
    symbol: string;
    feedId?: string;
}
interface MarketData {
    marketId?: number;
    marketName?: string;
    symbol?: string;
    feedId?: string;
    skew?: number;
    size?: number;
    maxOpenInterest?: number;
    interestRate?: number;
    currentFundingRate?: number;
    currentFundingVelocity?: number;
    indexPrice?: number;
    skewScale?: number;
    maxFundingVelocity?: number;
    makerFee?: number;
    takerFee?: number;
    maxMarketValue?: number;
}
interface SpotMarketData {
    marketId: number;
    contractAddress: string;
    marketName?: string;
    symbol?: string;
    feedId?: string;
    settlementStrategy?: SettlementStrategy;
}
interface SettlementStrategy {
    marketId?: number;
    strategyType?: number;
    settlementDelay?: number;
    settlementWindowDuration?: number;
    priceVerificationContract?: string;
    feedId?: string;
    settlementReward?: number;
    disabled?: boolean;
    commitmentPriceDelay?: number;
}
interface FundingParameters {
    marketId?: number;
    skewScale?: number;
    maxFundingVelocity?: number;
}
interface OrderFees {
    marketId?: number;
    makerFeeRatio?: number;
    takerFeeRatio?: number;
}
interface MaxMarketValue {
    marketId?: number;
    maxMarketValue?: number;
}
interface OrderData {
    marketId: number;
    commitmentTime: number;
    accountId: bigint;
    sizeDelta: number;
    settlementStrategyId: number;
    acceptablePrice: number;
    trackingCode: string;
    referrer: string;
    settlementStrategy?: SettlementStrategy;
}
interface CollateralData {
    totalCollateralValue: number;
    collateralBalances: Record<string, number>;
    debt: number;
    availableMargin: number;
    withdrawableMargin: number;
    initialMarginRequirement: number;
    maintenanceMarginRequirement: number;
    maxLiquidationReward: number;
}
interface OpenPositionData {
    accountId: bigint;
    marketId: number;
    marketName: string;
    totalPnl: number;
    accruedFunding: number;
    positionSize: number;
    owedInterest: number;
}
interface OrderQuote {
    orderSize: number;
    indexPrice: number;
    orderFees: number;
    settlementRewardCost: number;
    fillPrice: number;
    requiredMargin?: number;
}
interface SettlementStrategyResponse {
    strategyType?: number;
    settlementDelay?: bigint;
    settlementWindowDuration?: bigint;
    priceVerificationContract?: string;
    feedId?: string;
    settlementReward?: bigint;
    disabled?: boolean;
    commitmentPriceDelay?: bigint;
}
interface MarketSummaryResponse {
    skew: bigint;
    size: bigint;
    maxOpenInterest: bigint;
    currentFundingRate: bigint;
    currentFundingVelocity: bigint;
    indexPrice: bigint;
}

export type { CollateralData, FundingParameters, MarketData, MarketMetadata, MarketSummary, MarketSummaryResponse, MaxMarketValue, OpenPositionData, OrderData, OrderFees, OrderQuote, PayDebtAndWithdraw, SettlementStrategy, SettlementStrategyResponse, SpotMarketData };
