#!/bin/sh

CSYNC2=/usr/sbin/csync2
AT_JOB_FILE=/var/run/ahs_csync2_atjob

check_job()
{
    if [ -f "$AT_JOB_FILE" ]; then
        local job="$(cat "$AT_JOB_FILE")"
        local time="$(date +%s)"
        if [ "${job%.c}" -lt "$time" ]; then
            return 2    # File exist, but job time expired
        else
            return 0
        fi
    fi
    return 1
}

spawn_at()
{
    local period="$1"

    [ -n "$period" ] || return

    if $CSYNC2 -x >/dev/null 2>&1; then
        rm -f "$AT_JOB_FILE"
    else
        job="$(echo "$0 cont $period" | at 'now' + "$period" m 2>&1 | sed -n 's/^job \([[:digit:]]\+\.c\) at.*$/\1/p')"
        [ -n "$job" ] && echo "$job" >"$AT_JOB_FILE"
    fi
}

com="$1"; shift

case "$com" in
    start)
    check_job && exit 0
    if [ "$?" -eq 2 ]; then
        echo 'WARNING: The job file exist, but job time expired. File will be overwritten.' 1>&2
    fi
    spawn_at "${1:-10}"
    ;;
    cont*)
    spawn_at "${1:-10}"
    ;;
    status)
    check_job
    status="$?"
    case "$status" in
        0) echo 'Running' ;;
        1) echo 'Stopped' ;;
        2) echo 'WARNING: The job file exist, but job time expired.' ;;
        *) echo "Unknown status: $status" ;;
    esac
    exit "$status"
    ;;
    stop)
    job="$(cat "$AT_JOB_FILE" 2>/dev/null)"
    if [ -n "$job" ]; then
        at -r "$job"
        rm -f "$AT_JOB_FILE"
    else
        exit 0
    fi
    ;;
esac
