components_tasks_QuickConnectEnabledTask.bs

import "pkg:/source/api/ApiClient.bs"
import "pkg:/source/api/apiPool.bs"
import "pkg:/source/roku_modules/log/LogMixin.brs"

sub init()
  m.log = new log.Logger("QuickConnectEnabledTask")
  m.top.functionName = "fetchQuickConnectEnabled"
end sub

' Orchestrator Task: probes /QuickConnect/Enabled off the render thread.
' Updates m.global.server.isQuickConnectEnabled. Fail-open: leaves the field
' at its existing value (defaults true) on any error so a transient failure
' never hides a working feature.
' Sets responseCode to 200 on success, -1 on failure.
sub fetchQuickConnectEnabled()
  req = GetApi().BuildGetQuickConnectEnabledRequest()
  if isValid(req)
    m.log.info("Probing Quick Connect availability", "url:", req.url)
  else
    m.log.warn("Quick Connect probe skipped - server URL not configured")
    m.top.responseCode = -1
    m.top.failureReason = "server URL not configured"
    return
  end if

  res = fetchRes(req, "quickConnectEnabled")
  if not isValid(res)
    m.log.warn("Quick Connect probe returned no response (timeout or queue unavailable)")
    m.top.responseCode = -1
    m.top.failureReason = "fetchRes returned invalid"
    return
  end if

  if not res.ok
    ' Server reachable but returned a non-2xx status. Log and fail-open.
    m.log.warn("Quick Connect probe got non-OK response", "statusCode:", res.statusCode, "text:", res.text)
    m.top.responseCode = -1
    m.top.failureReason = "non-ok statusCode: " + res.statusCode.toStr()
    return
  end if

  ' Endpoint returns a plain boolean body. Coerce defensively in case a
  ' future server returns an object envelope or wraps the value as a string.
  enabled = res.json
  enabledType = type(enabled)
  if enabledType <> "Boolean" and enabledType <> "roBoolean"
    m.log.warn("Quick Connect probe got unexpected body type", "type:", enabledType, "raw:", res.text)
    enabled = (LCase(res.text.Trim()) = "true")
  end if

  m.global.server.isQuickConnectEnabled = enabled
  m.log.info("Quick Connect availability probed", "enabled:", enabled, "statusCode:", res.statusCode)
  m.top.responseCode = 200
end sub

' Reset task to default state
sub empty()
  m.top.responseCode = invalid
  m.top.failureReason = ""
end sub