local ew_api = dofile_once("mods/quant.ew/files/api/ew_api.lua")

-- Needs a unique, but preferably short identifier.
local rpc = ew_api.new_rpc_namespace("api_example")

-- Make the next rpc be delivered reliably.
-- This means that it will be called exactly once (unless a disconnection happens), and will be ordered the same way.
-- E. g. if you call rpc.rpc1(), rpc.rpc1(), rpc.rpc2() that are reliable, they will get called in the same order on other clients.
rpc.opts_reliable()
-- This rpc will also get called locally.
rpc.opts_everywhere()
function rpc.send_hi()
    GamePrint("Hi from " .. ew_api.rpc_player_data().name)
end

local module = {}

function module.on_world_update()
    if GameGetFrameNum() % 60 == 0 then
        GamePrint("Hi from api example!")
        rpc.send_hi()
    end
end

return module
-- Real implementation examples:
-- https://github.com/Conga0/Apotheosis/pull/45/commits/ebc4544a3614736d6e394a953ba58fa229e6aa81x

-- tags:
-- player_unit, only on the local player, besides when a client fires a wand, just for the fire function
-- ew_peer, on all players when not polied
-- ew_client, on all players besides your own, always
-- ew_synced, syncs an entity that isn't synced otherwise, needed before next preupdate loop after entity is spawned
-- ew_synced_var, syncs a variable storage component by name, needs to be on a synced entity
-- ew_no_enemy_sync, dont sync an entity that would be synced otherwise, needed before next preupdate loop after entity is spawned
-- ew_des, denotes if entity is synced by des, if unloaded and reloaded the entity will be culled on next preupdate loop
-- ew_des_lua, on some lua components related to des
-- ew_immortal, on some entitys you dont have auth over to fix damage numbers
-- ew_notplayer, on notplayer
-- ew_ghost_rnd, for something to sync perk ghosts rng
-- ew_projectile_position_sync, syncs a projectile by des
-- ew_unique, kills an entity if another one was spawned within the same chunk on any peer, by filename
-- ew_sync_child, syncs a thing in des ignoring weather its a child or not

-- var components(by name not tag):
-- ew_peer_id, on all peers, contains peerid in value_string
-- ew_gid_lid, on all* synced entitys by des, value_string has gid(constant across reload),
--   value_int has lid(constant across clients but not reload),
--   value_bool is true iff you have authority over entity
-- ew_frame_num, on mom or perk ghosts to sync position nicely
-- ew_rng, on some entitys(dice) to sync rng
-- ew_transmutation, on certain spells to sync rng
