#include "..\script_component.hpp"

/*
 * Function: dragonfly_db_fnc_publish
 * Author: Creedcoder, J. Schmidt
 * Edit: 07.15.2024
 * Copyright © 2024 Creedcoder, J. Schmidt, All rights reserved
 *
 * Do not edit without permission!
 *
 * This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
 * To view a copy of this license, vist https://creativecommons.org/licenses/by-nc-sa/4.0/ or send a letter to Creative Commons,
 * PO Box 1866, Mountain View, CA 94042
 *
 * [Description]
 * Publish a message to a DragonflyDB channel.
 * The message will be routed through the CBA event system based on the subscription event type.
 *
 * Arguments:
 * 0: STRING - Channel name to publish to (default: "")
 * 1: ARRAY|STRING|NUMBER|BOOL - Data to publish (default: [])
 *
 * Return Value:
 * BOOLEAN - True if successful, false otherwise
 *
 * Examples:
 * ["global_chat", "Hello world!"] call dragonfly_db_fnc_publish
 * ["mission_updates", ["task_01", "SUCCEEDED", [2, 3, 4]]] call dragonfly_db_fnc_publish
 *
 * Public: Yes
 */

params [
    ["_channel", "", [""]],
    ["_message", [], [[], "", 0, true]]
];

if (_channel isEqualTo "") exitWith {
    diag_log text format ["ArmaDragonflyClient: 'dragonfly_db_fnc_publish' Invalid Input for Channel '%1'", _channel];
    false
};

private _args = [_channel, _message];
private _formattedArgs = _args apply { if (_x isEqualType "") then { str _x } else { _x } };
private _extensionArgs = _formattedArgs joinString ",";
private _result = "ArmaDragonflyClient" callExtension ["publish", [_extensionArgs]];

diag_log text format ["ArmaDragonflyClient: 'dragonfly_db_fnc_publish' Published message to channel '%1': '%2'", _channel, _message];

true