#!/bin/bash
#
# Guralp Configuration System
#   Copyright (c) 2009-2012 Guralp Systems Ltd. All rights reserved.
#
#   Network GCF BRP input config

# Handle the navbar query without loading anything
if [ "X$1" == "X--navbar" ]
then
	echo "servicestop	Services"
	echo "servicessub/gcf-out-brp	gcf-out-brp"
	echo "gcf-out-brp/$3	$3"
	exit 0
fi

# Load support functions
script_dir=$(dirname $0)
. $script_dir/functions.sh
. $script_dir/svc_funcs.sh
. $script_dir/gdi2gcf_link.sh

name="$2"
sel="$3"

CFGFILE="$CONFIGDIR/$name/${sel}.local"
CTLFILE="$CONFIGDIR/$name/${sel}.ctl.local"
SRVBASE="$SERVDIR/$name"


do_read() {
    local i entry line

    # Standard control info
    gcs_svc_read || return 1

    # Now the service type dependant variables

    gcs_var "d_application_description"	"Network BRP out $sel"
    gcs_var "d_tcp_host"		""
    gcs_var "d_tcp_service"		"10002"	# 6TD Lantronics default
    gcs_var "d_acknak_timeout"		"150"
    gcs_var "d_mode"			"direct"
    gcs_var "d_filter_type"		"none"
    gcs_var "d_filter_sample_rate"	""
    gcs_var "d_brp_dbdir"		"/var/lib/gcf-out-brp.$sel"
    gcs_var "d_allow_terminal"  "true"

    if [ -r "$CFGFILE" ]
    then
	gcs_var_o "application_description"
	gcs_var_o "tcp_host"
	gcs_var_o "tcp_service"
	gcs_var_o "acknak_timeout"
	gcs_var_o "mode"
	gcs_var_o "filter_type"
	gcs_var_o "filter_sample_rate"
	gcs_var_o "brp_dbdir"
	gcs_var_o "allow_terminal"

	#application_name SKIPPED
	#link_type        FIXED tcp

	gcs_gdi2gcf_iselect "$(gcs_get_varcf "gcfout_dbdir" "${CFGFILE}")"

	line="$(gcs_get_varcf "filter_channels" "${CFGFILE}")"
	i=0
	for entry in ${line//,/ }
	do
	    gcs_var "o_filter_channel_name${i}" "${entry}"
	    ((++i))
	done
    else
	gcs_gdi2gcf_iselect ""
    fi
}


do_check() {
    gcs_read_vars
    
    # Standard service control/info vars
    gcs_svc_check

    case "${new_filter_type}" in
    sample_rate)
        if [ -z "${new_filter_sample_rate}" ]
        then
            gcs_err "filter_sample_rate" "Max sample rate not set."
        fi
        ;;
    channel_name)
	check_table_not_empty "filter_channels" "filter_channel_name" \
			"No channel names set."
        ;;
    esac

    gcs_gdi2gcf_dereference
}


do_write() {
    local -i i
    local f entry

    do_check
    if (( gcs_errors > 0 ))
    then
        return
    fi

    if gcs_truefalse "${new_delete:-false}"
    then
        gcs_svc_delete "$name" "$sel"
    fi

    # Standard service controls
    gcs_ensure_cfgfile_exists $CTLFILE
    gcs_set_varf DESC $CTLFILE "$desc"

    # Now the service type dependant variables
    gcs_ensure_cfgfile_exists "$CFGFILE"

    gcs_set_varcf "link_type"          "${CFGFILE}" "tcp"
    gcs_set_varcf "application_description" "${CFGFILE}" "${new_application_description}"
    gcs_set_varcf "tcp_host"           "${CFGFILE}" "${new_tcp_host}"
    gcs_set_varcf "tcp_service"        "${CFGFILE}" "${new_tcp_service}"
    gcs_set_varcf "acknak_timeout"     "${CFGFILE}" "${new_acknak_timeout}"
    gcs_set_varcf "mode"               "${CFGFILE}" "${new_mode}"
    gcs_set_varcf "filter_type"        "${CFGFILE}" "${new_filter_type}"
    gcs_set_varcf "filter_sample_rate" "${CFGFILE}" "${new_filter_sample_rate}"
    gcs_set_varcf "gcfout_dbdir"       "${CFGFILE}" "${new_gcfout_dbdir}"
    gcs_set_varcf "allow_terminal"     "${CFGFILE}" "${new_allow_terminal}"

    new_filter_channels=""
    for (( i = 0 ; i < $new_filter_channels_rows ; i++ ))
    do
        f="new_filter_channel_name${i}"
        [ -z "${!f}" ] && continue
	entry="$(echo ${!f} | tr a-z A-Z)"
	[ -n "${new_filter_channels}" ] && entry=",${entry}"
        new_filter_channels="${new_filter_channels}${entry}"
    done
    gcs_set_varcf "filter_channels"     "${CFGFILE}" "${new_filter_channels}"

    # Update the service script
    gcs_update_svc "$name" "$sel" "$enable" "$desc" "$CFGFILE" \
            "$CTLFILE" "$SRVBASE"

    gcs_svc_reload "$name" "$sel"
}


case "X$1" in
X--check)   do_check ;;
X--write)   do_write ;;
X--read)    do_read  ;;
*)          exit 1   ;;
esac

gcs_cleanup
exit 0

# vim: ts=4:sw=4:expandtab
