import aggregateNewRecords from '../aggregations/aggregateNewRecords.js'
import aggregateRecentRecords from '../aggregations/aggregateRecentRecords.js'
import aggregateTopRecords from '../aggregations/aggregateTopRecords.js'
import { BROWSERS_TYPE_NO_VERSION, BROWSERS_TYPE_WITH_VERSION } from '../constants/browsers.js'
import { SORTINGS_NEW, SORTINGS_RECENT, SORTINGS_TOP } from '../constants/sortings.js'
import Record from '../models/Record.js'
import recursiveId from '../utils/recursiveId.js'
const get = async (ids, sorting, type, range, limit, dateDetails) => {
const aggregation = (() => {
if (type === BROWSERS_TYPE_NO_VERSION) {
if (sorting === SORTINGS_TOP) return aggregateTopRecords(ids, ['browserName'], range, limit, dateDetails)
if (sorting === SORTINGS_NEW) return aggregateNewRecords(ids, ['browserName'], limit)
if (sorting === SORTINGS_RECENT) return aggregateRecentRecords(ids, ['browserName'], limit)
}
if (type === BROWSERS_TYPE_WITH_VERSION) {
if (sorting === SORTINGS_TOP)
return aggregateTopRecords(ids, ['browserName', 'browserVersion'], range, limit, dateDetails)
if (sorting === SORTINGS_NEW) return aggregateNewRecords(ids, ['browserName', 'browserVersion'], limit)
if (sorting === SORTINGS_RECENT) return aggregateRecentRecords(ids, ['browserName', 'browserVersion'], limit)
}
})()
const enhanceId = (id) => {
if (type === BROWSERS_TYPE_NO_VERSION) return `${id.browserName}`
if (type === BROWSERS_TYPE_WITH_VERSION) return `${id.browserName} ${id.browserVersion}`
}
const enhance = (entries) => {
return entries.map((entry) => {
const value = enhanceId(entry._id)
return {
id: recursiveId([value, sorting, type, range, ...ids]),
value,
count: entry.count,
created: entry.created,
}
})
}
return enhance(await Record.aggregate(aggregation))
}
export default get