import math
import re
import unittest
from pathlib import Path


ROOT = Path(__file__).resolve().parents[1]
CALCULATORS_TS = ROOT / "hdyc-svelte" / "src" / "lib" / "data" / "calculators.ts"
NUMERIC_SAMPLES = [0.1, 0.5, 1, 2, 5, 10, 20, 50, 100]
TARGET_SLUG = "angstroms-to-nautical-miles"


def _parse_factor(slug: str) -> float:
    text = CALCULATORS_TS.read_text(encoding="utf-8")
    match = re.search(rf'"slug": "{slug}".*?"factor": ([0-9.eE+-]+)', text, flags=re.S)
    if not match:
        raise AssertionError(f"Could not find calculator definition for '{slug}'")
    return float(match.group(1))


def _js_fmt(value: float) -> str:
    if not math.isfinite(value):
        return str(value)
    if value == 0:
        return "0"
    abs_val = abs(value)
    if abs_val < 1e-6:
        return f"{value:.6e}"
    rounded = float(f"{value:.6f}")
    if rounded.is_integer():
        return str(int(rounded))
    return repr(rounded)


class QuickConversionChartRoundingTests(unittest.TestCase):
    def test_angstroms_to_nautical_miles_chart_does_not_round_to_zero(self) -> None:
        factor = _parse_factor(TARGET_SLUG)
        outputs = [_js_fmt(sample * factor) for sample in NUMERIC_SAMPLES]
        self.assertTrue(
            any(output != "0" for output in outputs),
            f"{TARGET_SLUG} quick conversion chart rounded every sample down to 0: {outputs}",
        )


if __name__ == "__main__":
    unittest.main()
