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 area: ReadonlyDeep<Family> = {
	id: Id.Area,
	best: {metric: ['mm2', 'cm2', 'm2', 'km2'], imperial: ['sq in', 'sq ft', 'sq mi', 'ac']},
	conversions: [
		// https://en.wikipedia.org/wiki/Category:Units_of_area
		// https://en.wikipedia.org/wiki/Square_metre
		{names: ['square meter', 'square meters', 'square metre', 'square metres'], symbols: ['m²', 'm2'], ratio: 1},
		...expandMacro(Macros.areaSi, {names: ['meter', 'metre', 'meters', 'metres'], symbols: ['m²', 'm2'], ratio: 1}),

		// https://en.wikipedia.org/wiki/Conversion_of_units#Area
		{names: ['acre', 'acres'], symbols: ['ac'], ratio: 4046.856_422_4},

		// https://en.wikipedia.org/wiki/Hectare#Are
		{names: ['centiare', 'centiares'], symbols: ['ca'], ratio: 1},
		{names: ['deciare', 'deciares'], symbols: ['da'], ratio: 1e1},
		// Symbol `a` is excluded to avoid conflict
		{names: ['are', 'ares'], ratio: 1e2},
		{names: ['decare', 'decares'], symbols: ['daa'], ratio: 1e3},
		{names: ['hectare', 'hectares'], symbols: ['ha'], ratio: 1e4},

		{names: ['square foot', 'square feet'], symbols: ['sq ft'], ratio: 9.290_304e-2},
		{names: ['square inch', 'square inches'], symbols: ['sq in'], ratio: 6.4516e-4},
		{names: ['square yard', 'square yards'], symbols: ['sq yd'], ratio: 0.836_127_36},
		{names: ['square mile', 'square miles'], symbols: ['sq mi'], ratio: 2.589_988_110_336e6},
	],
};