import type {ReadonlyDeep} from 'type-fest';
import {expandMacro, Macros} from '../macros/index.js';
import type {Family} from '../types/index.js';
import {Id} from '../types/index.js';

export const data: ReadonlyDeep<Family> = {
	id: Id.Data,
	best: ['bits', 'B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB'],
	/**
	 * @see https://en.wikipedia.org/wiki/Orders_of_magnitude_(data) Source
	 */
	conversions: [
		{names: ['bit', 'bits'], symbols: ['b'], ratio: 1},

		...expandMacro(Macros.binary, {names: ['bit', 'bits'], symbols: ['b'], ratio: 1}),
		...expandMacro(Macros.si, {names: ['bit', 'bits'], symbols: ['b'], kind: 'big', ratio: 1}),

		{
			names: ['nibble', 'nibbles', 'semioctet', 'semioctets', 'halfbyte', 'halfbytes'],
			ratio: 4,
		},

		{names: ['byte', 'bytes', 'octect', 'octects'], symbols: ['B'], ratio: 8},
		...expandMacro(Macros.binary, {names: ['byte', 'bytes'], symbols: ['B'], ratio: 8}),
		...expandMacro(Macros.si, {names: ['byte', 'bytes'], symbols: ['B'], kind: 'big', ratio: 8}),

		{names: ['hextet', 'hextets'], ratio: 16},
	],
};