-- =========================================================
-- Speed Camera BR — Configuração Global (SpeedCameraConfig)
-- =========================================================
-- Guarda a configuração compartilhada de todos os radares do servidor:
--   - destFarmId: a fazenda que RECEBE as multas (a "prefeitura")
--   - transactionFee: fração que a fazenda destino recebe (1.0 = 100%)
--
-- Só o ADMIN pode alterar. Persiste no savegame e sincroniza no MP.
-- =========================================================

SpeedCameraConfig = {}
SpeedCameraConfig.destFarmId    = 0     -- 0 = ninguém recebe (multa só sai da conta)
SpeedCameraConfig.transactionFee = 1.0  -- 100% vai pra fazenda destino por padrão
SpeedCameraConfig.enabled       = true  -- radares ligados/desligados globalmente

-- ─── Persistência (arquivo do savegame) ──────────────────
function SpeedCameraConfig.getConfigPath()
    if g_currentMission == nil or g_currentMission.missionInfo == nil then return nil end
    local savegameDir = g_currentMission.missionInfo.savegameDirectory
    if savegameDir == nil then return nil end
    return savegameDir .. "/speedCameraConfig.xml"
end

function SpeedCameraConfig.load()
    local path = SpeedCameraConfig.getConfigPath()
    if path == nil or not fileExists(path) then return end

    local xml = loadXMLFile("SCConfig", path)
    if xml == nil or xml == 0 then return end

    SpeedCameraConfig.destFarmId =
        getXMLInt(xml, "speedCameraConfig.destFarmId") or 0
    SpeedCameraConfig.transactionFee =
        getXMLFloat(xml, "speedCameraConfig.transactionFee") or 1.0
    local en = getXMLBool(xml, "speedCameraConfig.enabled")
    if en ~= nil then SpeedCameraConfig.enabled = en end

    delete(xml)
    print(string.format(
        "[SpeedCameraBR] Config carregada: destFarmId=%d fee=%.2f enabled=%s",
        SpeedCameraConfig.destFarmId, SpeedCameraConfig.transactionFee,
        tostring(SpeedCameraConfig.enabled)))
end

function SpeedCameraConfig.save()
    local path = SpeedCameraConfig.getConfigPath()
    if path == nil then return end

    local xml = createXMLFile("SCConfig", path, "speedCameraConfig")
    setXMLInt(xml,   "speedCameraConfig.destFarmId",     SpeedCameraConfig.destFarmId)
    setXMLFloat(xml, "speedCameraConfig.transactionFee", SpeedCameraConfig.transactionFee)
    setXMLBool(xml,  "speedCameraConfig.enabled",        SpeedCameraConfig.enabled)
    saveXMLFile(xml)
    delete(xml)
    print("[SpeedCameraBR] Config salva.")
end

-- ─── Permissão: o jogador local é admin? ─────────────────
function SpeedCameraConfig.isLocalPlayerAdmin()
    if g_currentMission == nil then return false end

    -- SINGLEPLAYER / OFFLINE: não há multiplayer ativo → jogador é admin.
    -- g_currentMission.missionDynamicInfo.isMultiplayer é false em offline.
    local isMP = false
    if g_currentMission.missionDynamicInfo ~= nil then
        isMP = g_currentMission.missionDynamicInfo.isMultiplayer == true
    end
    if not isMP then
        return true  -- offline: sempre admin
    end

    -- HOST de servidor (joga e hospeda) é admin
    if g_currentMission:getIsServer() and not g_dedicatedServer then
        return true
    end

    -- CLIENTE em servidor: precisa ser masterUser (admin logado via senha)
    if g_currentMission.isMasterUser == true then
        return true
    end

    -- Fallback: verifica no userManager
    if g_currentMission.userManager ~= nil and g_localPlayer ~= nil then
        local user = g_currentMission.userManager:getUserByUserId(g_localPlayer.userId)
        if user ~= nil and user.isMasterUser == true then
            return true
        end
    end

    return false
end

-- ─── Nome da fazenda destino (pra exibição) ──────────────
function SpeedCameraConfig.getDestFarmName()
    if SpeedCameraConfig.destFarmId == 0 then
        return g_i18n:getText("sc_no_dest_farm")
    end
    if g_farmManager then
        local farm = g_farmManager:getFarmById(SpeedCameraConfig.destFarmId)
        if farm and farm.name and farm.name ~= "" then
            return farm.name
        end
    end
    return string.format("%s %d", g_i18n:getText("sc_farm"), SpeedCameraConfig.destFarmId)
end
