#!/bin/sh
#
# This script can be used to develop and test the frontend without having to
# link the build in a running core instance through the frontend/development_repo setting.
#
# WARNING:
# If you have an active login session in the frontend. The core that was used
# as a backend during the time of the login remains used until you logout again.
# So if you reuse the url hosting the frontend, you will need to logout before
# it will actually start using the core backend configured by this script.
#
# If you run this script without parameters, the frontend will be accessible under http://localhost:8124.
# And it will use the core instance running under http://localhost:8123 as a backend.
# Note that from a devcontainer, the frontend will be accessible under port 8124 on the host container.
# Inside the devcontainer it will be accessible under port 8123 instead.
# The core instance endpoint remains the same in both cases, as this is resolved from the browser.
#
# You can change the core instance the frontend connects to by passing the -c option.
# For example: script/develop_and_serve -c https://myhost.duckdns.org:8123
# This will also work for existing production core instances.
# It does not need to be a development version hosted locally.
#
# You can change the port the frontend is served on by passing the -p option.
# For example: script/develop_and_serve -p 8654
# Note that if you are running from a devcontainer, you will need to setup
# port forwarding as well if you want to access it from the container host.

# Stop on errors
set -e

cd "$(dirname "$0")/.."

# parse input parameters
if [ -n "$DEVCONTAINER" ]; then
    frontendPort=8123
else
    frontendPort=8124
fi

coreUrl=http://localhost:8123

while getopts p:c:h flag
do
    case "${flag}" in
        p) frontendPort=${OPTARG};;
        c) coreUrl="${OPTARG}";;
        h) echo Documentation can be found inside "$0" && exit 0;;
        *) echo Documentation can be found inside "$0" && exit 1;;
    esac
done

# display used settings
if [ -n "$DEVCONTAINER" ]; then
    echo Frontend is available inside container as http://localhost:${frontendPort}
    if [ 8123 -eq $frontendPort ]; then
      echo Frontend is available on container host as http://localhost:8124
    fi
else
    echo Frontend is hosted on http://localhost:${frontendPort}
fi
echo Core is used from ${coreUrl}

# build the frontend so it connects to the passed core
HASS_URL="$coreUrl" ./script/develop &

# serve the frontend
./node_modules/.bin/serve -p $frontendPort --single --no-port-switching --config ../script/serve-config.json ./hass_frontend &

# keep the script running while serving
wait