local maxminddb = require("maxminddb")
local db = maxminddb.open("/etc/haproxy/geo/GeoLite2-City.mmdb")

core.register_fetches("geoip_country", function(txn)
    local client_ip = tostring(txn.f:src())
    if not client_ip then return "NO_IP" end
    
    -- Получаем тот самый Си-объект (MMDB_lookup_result_s)
    local res, err = db:lookup(client_ip)
    
    if err then return "ERR_" .. tostring(err) end
    
    if res then
        -- ДОСТАЕМ КОД СТРАНЫ ИЗ СИ-ОБЪЕКТА
        -- Используем метод :get() с путем к нужному полю
        local iso_code, err2 = res:get("country", "iso_code")
        
        if iso_code then
            return tostring(iso_code)
        end
        
        -- Запасной вариант, если страна лежит в registered_country
        local reg_iso, err3 = res:get("registered_country", "iso_code")
        if reg_iso then
            return tostring(reg_iso)
        end
    end
    
    return "UNKNOWN"
end)
