import { BN, ProtectMakerParamsMap } from '..';
import { PerpMarketAccount, ProtectedMakerParams } from '../types';

export function getProtectedMakerParams(
	perpMarket: PerpMarketAccount
): ProtectedMakerParams {
	let dynamicOffset;
	if (perpMarket.protectedMakerDynamicDivisor > 0) {
		dynamicOffset = BN.max(
			perpMarket.amm.oracleStd,
			perpMarket.amm.markStd
		).divn(perpMarket.protectedMakerDynamicDivisor);
	} else {
		dynamicOffset = 0;
	}

	return {
		tickSize: perpMarket.amm.orderTickSize,
		limitPriceDivisor: perpMarket.protectedMakerLimitPriceDivisor,
		dynamicOffset: dynamicOffset,
	};
}

export function getProtectedMakerParamsMap(
	perpMarkets: PerpMarketAccount[]
): ProtectMakerParamsMap {
	const map = {
		perp: new Map<number, ProtectedMakerParams>(),
		spot: new Map<number, ProtectedMakerParams>(),
	};
	for (const perpMarket of perpMarkets) {
		const marketIndex = perpMarket.marketIndex;
		const protectedMakerParams = getProtectedMakerParams(perpMarket);
		map.perp.set(marketIndex, protectedMakerParams);
	}
	return map;
}
