#!/bin/bash

#### Webcamd Core Application.

#### crowsnest - A webcam Service for multiple Cams and Stream Services.
####
#### Written by Stephan Wendel aka KwadFan <me@stephanwe.de>
#### Copyright 2021
#### https://github.com/mainsail-crew/crowsnest
####
#### This File is distributed under GPLv3
####

# shellcheck enable=require-variable-braces

# Exit upon Errors
set -Ee

# Base Path
BASE_CN_PATH="$(dirname "$(readlink -f "${0}")")"

## Import Librarys
# shellcheck source-path=SCRIPTDIR/../libs/
. "${BASE_CN_PATH}/libs/camera-streamer.sh"
. "${BASE_CN_PATH}/libs/configparser.sh"
. "${BASE_CN_PATH}/libs/core.sh"
. "${BASE_CN_PATH}/libs/hwhandler.sh"
. "${BASE_CN_PATH}/libs/init_stream.sh"
. "${BASE_CN_PATH}/libs/logging.sh"
. "${BASE_CN_PATH}/libs/messages.sh"
. "${BASE_CN_PATH}/libs/ustreamer.sh"
. "${BASE_CN_PATH}/libs/v4l2_control.sh"
. "${BASE_CN_PATH}/libs/versioncontrol.sh"
. "${BASE_CN_PATH}/libs/watchdog.sh"

#### MAIN
## Args given?
if [ "$#" -eq 0 ]; then
    missing_args_msg
    exit 1
fi

## Parse Args
while getopts ":vhc:d" arg; do
    case "${arg}" in
        v )
            echo -e "\ncrowsnest Version: $(self_version)\n"
            exit 0
        ;;
        h )
            help_msg
            exit 0
        ;;
        c )
            check_cfg "${OPTARG}"
            export CROWSNEST_CFG="${OPTARG}"
        ;;
        d )
            set -x
        ;;
        \?)
            wrong_args_msg
            exit 1
        ;;
    esac
done

init_logging
initial_check
construct_streamer

## Loop and Watchdog
## In this case watchdog acts more like a "cable defect detector"
## The User gets a message if Device is lost.
clean_watchdog
while true ; do
    crowsnest_watchdog
    sleep 120 & sleep_pid="$!"
    wait "${sleep_pid}"
done