import { esiAxiosInstance } from "@/service"; export const jitaId = 10000002; export type MarketOrderHistory = { average: number; date: string; highest: number; lowest: number; order_count: number; volume: number; } export const getHistory = async (regionId: number, tyeId: number): Promise => (await esiAxiosInstance.get(`/markets/${regionId}/history/`, { params: { type_id: tyeId } })).data; export const getHistoryQuartils = async (regionId: number, tyeId: number): Promise<[number, number, number]> => { const history = await getHistory(regionId, tyeId); const volumes = history .flatMap(h => { const volume = h.volume; if (volume === 0) { return []; } const e = estimateVolume(h); return [[h.highest, e], [h.lowest, volume - e]]; }) .filter(h => h[1] > 0) .sort((a, b) => a[0] - b[0]); const totalVolume = volumes.reduce((acc, [_, v]) => acc + v, 0); const quartilVolume = totalVolume / 4; const quartils: [number, number, number] = [0, 0, 0]; let currentVolume = 0; let quartil = 0; for (const [price, volume] of volumes) { currentVolume += volume; if (currentVolume >= quartilVolume * (quartil + 1)) { quartils[quartil] = price; if (quartil === 2) { break; } quartil++; } } return quartils; } const estimateVolume = (history: MarketOrderHistory): number => { if (history.volume === 0) { return 0; } return Math.max(1, Math.round(history.volume * ((history.average - history.lowest) / (history.highest - history.lowest)))); }