-- Shared key/value store across engines: Lua seeds the process-wide kv with a JSON
-- config blob and a numeric counter, then a spawned JavaScript task reads both back
-- (parsing the JSON), prints them, and bumps the counter to 42. Because kv is shared
-- across every engine, Lua sees the JS write: after a short timer it reads the counter
-- again, confirms it is now 42, then tears everything down.
-- Run: bin/calog examples/scripts/polyglot/sharedKv.lua

-- Seed shared state from Lua before spawning the child.
kvSet("config", jsonStringify({ name = "calog", version = 1 }))
kvSet("counter", 41)
calogPrint("lua seeded config and counter =", kvGet("counter"))

-- The child runs on the JavaScript engine and reads/writes the same shared kv.
local jsCode = [[
    var config = jsonParse(kvGet("config"));
    calogPrint("javascript read config name:", config.name, "version:", config.version);
    calogPrint("javascript read counter:", kvGet("counter"));
    kvSet("counter", 42);
    calogPrint("javascript set counter to 42");
]]

local child = taskSpawn("js", jsCode)
calogPrint("spawned javascript task:", child)

-- Give the JS task time to run its read/write, then observe the shared write from Lua.
timerAfter(300, function()
    calogPrint("lua sees counter =", kvGet("counter"))
    taskClose(child)
    calogExit(0)
end)
