#!/usr/bin/env bb

(require '[clojure.tools.cli :refer [parse-opts]])
(use '[clojure.string])
(require '[clojure.math :refer [round]])

(def cli-options
  [["-i" "--inverse" "Inverses the conversion so the value is converted to a percentage from a given hex number."
    :id :inverse
    :default false]])

(def step-size 2.55M)
(def parsed-params (parse-opts *command-line-args* cli-options))
(def options (:options parsed-params))
(def value (first (:arguments parsed-params)))

(defn pad-with-zero
  [length string]
  (as-> string $
   (count $)
   (- length $)
   (take $ (repeat "0"))
   (concat $ string)
   (join $)))

(defn to-hex
  [value]
  (->> value
      (Integer/parseInt)
      (* step-size)
      (round)
      (int)
      (format "%x")
      (pad-with-zero 2)))

(defn from-hex
  [value]
  (as-> value $
      (Integer/parseInt $ 16)
      (with-precision 2(/ $ step-size))
      (round $)
      (int $)
      (str $)))

(if (:inverse options)
  (print (from-hex value))
  (print (to-hex value)))