%%%-----------------------------------------------------------------------------
%%% @copyright (C) 2013-2019, 2600Hz
%%% @doc Set or export multiple Custom Channel variables.
%%%
%%%
Data options:
%%%
%%% - `custom_application_vars'
%%% - A JSON object of the Key/Value of the variable/value to set or export.
%%%
%%% - `export'
%%% - `boolean()', should export instead of set or not.
%%%
%%%
%%%
%%% @end
%%%-----------------------------------------------------------------------------
-module(cf_set_variables).
-behaviour(gen_cf_action).
-include("callflow.hrl").
-export([handle/2]).
%%------------------------------------------------------------------------------
%% @doc Entry point for this module
%% @end
%%------------------------------------------------------------------------------
-spec handle(kz_json:object(), kapps_call:call()) -> 'ok'.
handle(Data, Call) ->
CAVs = get_custom_application_vars(Data),
Export = kz_json:is_true(<<"export">>, Data),
Call1 = cf_exe:update_call(set_variables(Export, CAVs, Call)),
cf_exe:continue(Call1).
-spec get_custom_application_vars(kz_json:object()) -> kz_term:proplist().
get_custom_application_vars(Data) ->
JObj = kz_json:get_json_value(<<"custom_application_vars">>, Data, kz_json:new()),
kz_json:to_proplist(JObj).
-spec set_variables(boolean(), kz_term:proplist(), kapps_call:call()) -> kapps_call:call().
set_variables('true', CAVs, Call) ->
lager:debug("exporting custom app vars: ~p", [CAVs]),
kapps_call:set_custom_application_vars(CAVs, Call, 'true');
set_variables('false', CAVs, Call) ->
lager:debug("setting custom app vars: ~p", [CAVs]),
kapps_call:set_custom_application_vars(CAVs, Call, 'false').