--[[
  @package    eg4-crank-ui-2
  @file       temperature-dial.lua
  @brief      Handles the slider control screen
]]

---
--- @brief  Updates the temperature dial as a result of a change in the value
--- @param  context_control  The control to update
function update_temperature_dial(context_control)
  local percentage = gre.get_value(context_control..".value")

  if percentage == nil or percentage < 0 then
    gre.set_value(
      context_control..".text", "---",
      context_control..".angle", 0)
    return
  end

  if percentage > 1 then percentage = 1 end

  -- Define the percentages and colors
  local palette = loadstring("return {"..gre.get_value(context_control..".palette").."}")()
  -- Determine the colour to use
  local index = #palette
  for i = 1, #palette do
    if percentage <= palette[i].pc then
      index = i
      break
    end
  end

  gre.set_value(
    context_control..".text", string.format("%.0f%%", percentage * 100),
    context_control..".angle", 360 * percentage,
    context_control..".color", gre.get_value(palette[index].color))
end

---
--- @brief  Updates the temperature dial as a result of a change in the value
--- @param  mapargs.context_control  The control to update
function cb_update_temperature_dial(mapargs)
  update_temperature_dial(mapargs.context_control)
end
