/**
* @module
*/
import { downloadCount } from './color-formatters.js'
import { metric } from './text-formatters.js'
/**
* Handles rendering concerns of badges that display
* download counts, with override/customization support
*
* @param {object} attrs Refer to individual attrs
* @param {number} attrs.downloads Number of downloads
* @param {string} [attrs.interval] Period or interval the downloads occurred
* (e.g. day, week, month). If provided then this Will be reflected
* in the badge message unless overridden by other message-related parameters
* @param {string} [attrs.version] Version or tag that was downloaded
* which will be reflected in the badge label (unless the label is overridden)
* @param {string} [attrs.labelOverride] If provided then the badge label is set to this
* value overriding any other label-related parameters
* @param {string} [attrs.colorOverride] If provided then the badge color is set to this
* value instead of the color being based on the count of downloads
* @param {string} [attrs.messageSuffixOverride] If provided then the badge message will
* will have this value added to the download count, separated with a space
* @param {string} [attrs.versionedLabelPrefix] If provided then the badge label will use
* this value as the prefix for versioned badges, e.g. `foobar@v1.23`. Defaults to 'downloads'
* @returns {object} Badge
*/
function renderDownloadsBadge({
downloads,
interval,
version,
labelOverride,
colorOverride,
messageSuffixOverride,
versionedLabelPrefix = 'downloads',
}) {
let messageSuffix = ''
if (messageSuffixOverride) {
messageSuffix = ` ${messageSuffixOverride}`
} else if (interval) {
messageSuffix = `/${interval}`
}
let label
if (labelOverride) {
label = labelOverride
} else if (version) {
label = `${versionedLabelPrefix}@${version}`
}
return {
label,
color: colorOverride || downloadCount(downloads),
message: `${metric(downloads)}${messageSuffix}`,
}
}
export { renderDownloadsBadge }