#!/usr/bin/env bash

# Copyright (C) 2016, Canonical Ltd.
# All rights reserved.

# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree. An additional grant
# of patent rights can be found in the PATENTS file in the same directory.

args=""
on_device=0
plugins_path=""
asset_path="share"
executor=""

# Parse args
for arg in "$@"
do
  IFS="=" read -a parts <<< "$arg"
  if [[ $parts == "--on-device" ]]; then
    on_device=1
  elif [[ $parts == "--plugins-path" ]]; then
    plugins_path=${parts[1]}
    args=$args" --plugins-path=./plugins"
  elif [[ $parts == "--asset-path" ]]; then
    asset_path=${parts[1]}
  elif [[ $parts == "--executor" ]]; then
    if [[ $on_device == 1 ]]; then
      # Force net executor for now
      executor="ReactNetExecutor"
    else
      executor=${parts[1]}
    fi
    args=$args" --executor=$executor"
  else
    args=$args" $parts"
  fi
done

# Handle defaults
if [[ -z "$executor" ]]; then
  if [[ $on_device == 1 ]]; then
    executor="ReactNetExecutor"
    args=$args" --executor=ReactNetExecutor"
  fi

  # The RN application selects pipe executor by default
fi

# For net case, try and run executor; it is probably OK if this fails - it's
# just running elsewhere
if [[ "$executor" == "ReactNetExecutor" ]]; then
  (node @CMAKE_BINARY_DIR@/bin/ubuntu-server.js 2>&1 > /dev/null) &
fi

if [[ $on_device == 1 ]]; then
  app_path="/home/phablet/@APP_NAME@"

# Push binaries
  adb push @CMAKE_BINARY_DIR@/bin/@APP_NAME@ "$app_path/@APP_NAME@"
  [ -d "$plugins_path" ] && adb push "$plugins_path" "$app_path/plugins/"
  [ -d "$asset_path" ] && adb push "$asset_path" "$app_path/share/"
#  adb reverse --no-rebind tcp:8081 tcp:808

# Run app on device
  react_host=`hostname -I`

  adb shell "cd $app_path && REACT_SERVER_HOST=$react_host ./@APP_NAME@ --host $react_host $args -- --desktop_file_hint=/usr/share/applications/webbrowser-app.desktop"
else
# Run app locally
  # Note: Needed to add QT_XCB_GL_INTEGRATION=none when migrating to Nix, since running the app in debug mode inside Nix shell was failing at run time with "qt.glx: qglx_findConfig: Failed to finding matching FBConfig (1 1 1 0)\nCould not initialize GLX"
  QT_XCB_GL_INTEGRATION=none @CMAKE_BINARY_DIR@/bin/@APP_NAME@ $args
fi