#! /usr/bin/env bash

unset ZEEK_DISABLE_ZEEKYGEN

# If running this from btest, unset any of the environment
# variables that alter default script values.
unset ZEEK_DEFAULT_LISTEN_ADDRESS
unset ZEEK_DEFAULT_LISTEN_RETRY
unset ZEEK_DEFAULT_CONNECT_RETRY

dir="$(cd "$(dirname "$0")" && pwd)"
source_dir="$(cd $dir/.. && pwd)"
build_dir=$source_dir/build
conf_file=$build_dir/zeekygen-test.conf
output_dir=$source_dir/doc
zeek_error_file=$build_dir/zeekygen-test-stderr.txt

if [ -n "$1" ]; then
    output_dir=$1
fi

case $output_dir in
    /*) ;;
    *) output_dir=$(pwd)/$output_dir ;;
esac

cd $build_dir
. zeek-path-dev.sh
export ZEEK_SEED_FILE=$source_dir/testing/btest/random.seed

function run_zeek {
    ZEEK_ALLOW_INIT_ERRORS=1 zeek -X $conf_file zeekygen >/dev/null 2>$zeek_error_file

    if [ $? -ne 0 ]; then
        echo "Failed running zeek with zeekygen config file $conf_file"
        echo "See stderr in $zeek_error_file"
        exit 1
    fi
}

scripts_output_dir=$output_dir/scripts
rm -rf $scripts_output_dir
printf "script\t*\t$scripts_output_dir/" >$conf_file
echo "Generating $scripts_output_dir/"
run_zeek

script_ref_dir=$output_dir/script-reference
mkdir -p $script_ref_dir

function generate_index {
    echo "Generating $script_ref_dir/$2"
    printf "$1\t*\t$script_ref_dir/$2\n" >$conf_file
    run_zeek
}

generate_index "script_index" "autogenerated-script-index.rst"
generate_index "package_index" "autogenerated-package-index.rst"
generate_index "file_analyzer" "autogenerated-file-analyzer-index.rst"
generate_index "proto_analyzer" "autogenerated-protocol-analyzer-index.rst"
generate_index "packet_analyzer" "autogenerated-packet-analyzer-index.rst"

echo

branch="$(git branch --show-current)"

if [[ "$branch" =~ ^release/.* ]]; then
    doc_config_file=$source_dir/doc/conf.py
    cat ${doc_config_file} | sed \
        -e "s#\(zeek_code_version[[:space:]]*=[[:space:]]*\)[^\n]*#\1'$branch'#g" \
        >${doc_config_file}.tmp
    mv ${doc_config_file}.tmp ${doc_config_file}
fi

if [ -n "$(cd $source_dir/doc && git status --porcelain)" ]; then
    echo "*** There are changes in zeek-docs that need a review, commit, and push ***"
else
    echo "No changes or further action needed"
fi
