---
--- @package   eg4-crank-ui
--- @file      ethernet-port-settings.lua
--- @brief     functionality related ethernet port settings screen 
---
--- @copyright Copyright 2019 Hanover Displays Limited.
--- @license   This program is the confidential and proprietary product of
---            Hanover Displays Limited. Any unauthorised use, reproduction or
---            transfer of this program is strictly prohibited. (Subject to 
---            limited distribution and restricted disclosure only.) All 
---            rights reserved.                                              
---

local backend = "g4_backend"

---
--- @brief  Sends event to backend      
--- @param  event
---
function SendEvent(event)
  gre.send_event(event, backend)
end

---
--- @brief  Call back to send event to backend      
--- @param  gre#context mapargs
---
function CBSendEvent(mapargs)
  SendEvent(mapargs.event)
end

---
--- @brief  Sends event with a numeric value to backend      
--- @param  event - event to send
--- @param  value - value to attach
---
function SendValue(event, value)
  if value ~= nil then
    gre.send_event_data(
      event,
      "4s1 value",
      { value = tonumber(value) },
      backend)
  end
end

---
--- @brief  Sends event with a numeric value to backend      
--- @param  event - event to send
--- @param  value - value to attach
---
function CBSendValue(mapargs)
  SendValue(mapargs.event, mapargs.value)
end

---
--- @brief  Sends event with a float value to backend      
--- @param  event - event to send
--- @param  value - value to attach
---
function SendFloat(event, value)
  if value ~= nil then
    gre.send_event_data(
      event,
      "4f1 value",
      { value = tonumber(value) },
      backend)
  end
end

---
--- @brief  Sends event with a text string to backend      
--- @param  event - event to send
--- @param  value - value to attach
---
function SendText(event, value)
  if value ~= nil then
    gre.send_event_data (
      event,
      "1s0 text",
      { text = tostring(value) },
      backend
    )
  end
end

---
--- @brief  Sends event with a text string to backend      
--- @param  gre#context mapargs
function CBSendText(mapargs)
  SendText(mapargs.event, mapargs.text or "")
end

---
--- @brief  Sends event with a text id and a value to backend      
--- @param  gre#context mapargs
---
function SendPortIDValue(event, port_id, value)
  gre.send_event_data(
    event,
    "4s1 value 1s0 port_id",
    { port_id = port_id, value = value },
    backend)
end

---
--- @brief  Sends event with a numeric id and value from control that may be scrollable.      
--- @param  gre#context mapargs
---
function CBWriteIDValue(mapargs)
  if not ScrollActive() then
    SendPortIDValue(mapargs.event, mapargs.port_id, mapargs.value)
  end
end

---
--- @brief  Sends event with a id and the context row (result of table selection)      
--- @param  gre#context mapargs
---
function CBWriteIDDataValue(mapargs)
  if not ScrollActive() then
    SendPortIDValue(mapargs.event, mapargs.port_id, mapargs.context_row - 1)
  end
end

---
--- @brief  Sends the value event with a id value and the indexed value      
--- @param  gre#context mapargs
---
function CBWriteIDIndexedValue(mapargs)
  if not ScrollActive() then
    local value = tonumber(gre.get_value(mapargs.context_control..".value."..mapargs.context_row..".1"))
    SendPortIDValue(mapargs.event, mapargs.port_id, tonumber(value))
  end
end

---
--- @brief  Scans the control for the matched value index
---
function GetIndexOfValue(control, value)
  local index = 1
  local data
  repeat
    data = gre.get_value(control..".value."..index..".1")
    if tonumber(data) == value then
      return index
    end
    index = index + 1
  until data == nil
end

---
--- @brief  Scans the control for the matched value and returns the associated text
---
function GetTextByIndexValue(control, value)
  local index = GetIndexOfValue(control, value)
  return gre.get_value(control..".text."..index..".1") or ""
end

---
--- @brief  Sends an event from the icon menu
---
function CBSendIconEvent(mapargs)
  if ScrollActive() or IconMenuOpening() then return end
  SendEvent(mapargs.event)
end

-- EOF --
