import { METER } from "./si/METER.js";
import { KILOGRAM } from "./si/KILOGRAM.js";
import { SECOND } from "./si/SECOND.js";
import { AMPERE } from "./si/AMPERE.js";
import { KELVIN } from "./si/KELVIN.js";
import { MOLE } from "./si/MOLE.js";
import { CANDELA } from "./si/CANDELA.js";

import { HERTZ } from "./si/derived/HERTZ.js";
import { NEWTON } from "./si/derived/NEWTON.js";
import { PASCAL } from "./si/derived/PASCAL.js";
import { JOULE } from "./si/derived/JOULE.js";
import { WATT } from "./si/derived/WATT.js";
import { COULOMB } from "./si/derived/COULOMB.js";
import { VOLT } from "./si/derived/VOLT.js";
import { FARAD } from "./si/derived/FARAD.js";
import { OHM } from "./si/derived/OHM.js";
import { SIEMENS } from "./si/derived/SIEMENS.js";
import { WEBER } from "./si/derived/WEBER.js";
import { TESLA } from "./si/derived/TESLA.js";
import { HENRY } from "./si/derived/HENRY.js";
import { LUMEN } from "./si/derived/LUMEN.js";
import { LUX } from "./si/derived/LUX.js";
import { BECQUEREL } from "./si/derived/BECQUEREL.js";
import { GRAY } from "./si/derived/GRAY.js";
import { SIEVERT } from "./si/derived/SIEVERT.js";
import { KATAL } from "./si/derived/KATAL.js";

/**
 * Every named SI unit currently shipped — both the 7 base units and the 19 standard derived
 * units (N, Pa, J, W, C, V, F, Ω, S, Wb, T, H, Hz, lm, lx, Bq, Gy, Sv, kat).
 *
 * Suitable as a default registry for {@link unit_matrix_to_string} / {@link format_quantity}
 * when the caller wants compound quantities expressed in their canonical scientific shorthand
 * (e.g. a Volt matrix renders as `V` rather than `kg·m^2/s^3·A`).
 *
 * Order matters: derived units appear before base units so the decomposition prefers
 * shorthand over base expansion. Among derived units that share the same matrix
 * (e.g. {@link HERTZ} / {@link BECQUEREL}, {@link GRAY} / {@link SIEVERT}, {@link LUMEN} /
 * {@link CANDELA}), the more general / more frequently used one is listed first.
 *
 * @type {NamedUnit[]}
 */
export const MEASUREMENT_UNITS_SCIENTIFIC = [
    // Electrical & magnetic
    VOLT,
    OHM,
    SIEMENS,
    FARAD,
    COULOMB,
    WEBER,
    TESLA,
    HENRY,

    // Mechanical & energy
    JOULE,
    NEWTON,
    WATT,
    PASCAL,

    // Frequency / radioactivity (Hz preferred over Bq when dimensionally tied)
    HERTZ,
    BECQUEREL,

    // Photometric — lx is dimensionally distinct, so safe to list before cd/lm
    LUX,

    // Catalysis
    KATAL,

    // Ionising-radiation dose (Gy preferred over Sv when dimensionally tied)
    GRAY,
    SIEVERT,

    // Base SI units. Listed before LUMEN so a (0,0,0,0,0,0,1) matrix is read as `cd`
    // (luminous intensity, the SI base meaning) rather than `lm` (luminous flux).
    METER,
    KILOGRAM,
    SECOND,
    AMPERE,
    KELVIN,
    MOLE,
    CANDELA,

    // Lumen shares its matrix with Candela; placed last so cd wins on ties.
    LUMEN
];
