import { Address } from 'viem';
import { MarketIdOrName } from '../commonTypes.js';
import { PERPS_PERMISSIONS } from '../../constants/perpsPermissions.js';
import '../contractTypes.js';

interface GrantPermission {
    user: Address;
    permission: PERPS_PERMISSIONS;
    accountId?: bigint;
}
type GetPermissions = Omit<GrantPermission, 'permission' | 'user'>;
type AccountPermissions = {
    /**
     * @dev The address for which all the permissions are granted.
     */
    user: string;
    /**
     * @dev The array of permissions given to the associated address.
     */
    permissions: string[];
};
type CommitOrder = {
    size: number;
    settlementStrategyId: number;
    marketIdOrName: MarketIdOrName;
    accountId?: bigint;
    desiredFillPrice?: number;
    maxPriceImpact?: number;
};
type ModifyCollateral = {
    amount: number;
    collateralMarketIdOrName: MarketIdOrName;
    accountId?: bigint;
};
type CreateAccountDepositAndCreateOrder = {
    amount: number;
    collateralMarketIdOrName: MarketIdOrName;
    accountId?: bigint;
    order: {
        marketIdOrName: MarketIdOrName;
        size: number;
        settlementStrategyId?: number;
        acceptablePrice?: number;
        trackingCode?: string;
        referrer?: string;
    };
};
type CreateIsolateOrder = {
    collateralAmount: number;
    collateralMarketId: number;
    size: number;
    marketIdOrName: MarketIdOrName;
    settlementStrategyId: number;
    accountId?: bigint;
    desiredFillPrice?: number;
    maxPriceImpact?: number;
};
type GetPerpsQuote = {
    size: number;
    price?: number;
    marketIdOrName: MarketIdOrName;
    accountId?: bigint;
    settlementStrategyId?: number;
    includeRequiredMargin?: boolean;
};
type PayDebt = {
    accountId?: bigint;
    amount: number;
};
type CreateAccountAndDeposit = {
    amount: number;
    collateralMarketIdOrName: MarketIdOrName;
    accountId?: bigint;
};
type CreateAccountAndDepositMany = {
    amounts: number[];
    collateralMarketIdOrNames: MarketIdOrName[];
    accountId?: bigint;
};

export type { AccountPermissions, CommitOrder, CreateAccountAndDeposit, CreateAccountAndDepositMany, CreateAccountDepositAndCreateOrder, CreateIsolateOrder, GetPermissions, GetPerpsQuote, GrantPermission, ModifyCollateral, PayDebt };
