# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
# 
# http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

#!/bin/bash

set -e

PROJECT_PATH=$( cd "$( dirname "$0" )/.." && pwd )

function check_devices {
    local devices=`adb devices | awk '/List of devices attached/ { while(getline > 0) { print }}'`
    if [ -z "$devices"  ] ; then
        echo "1"
    else
        echo "0"
    fi
}

function emulate {
    declare -a avd_list=($(android list avd | grep "Name:" | cut -f 2 -d ":" | xargs))
    # we need to start adb-server
    adb start-server 1>/dev/null

    # Do not launch an emulator if there is already one running or if a device is attached
    if [ $(check_devices) == 0 ] ; then
        echo "Device attached or emulator already running"
        return
    fi

    local avd_id="1000" #FIXME: hopefully user does not have 1000 AVDs
    # User has no AVDs
    if [ ${#avd_list[@]} == 0 ]
    then
        echo "You don't have any Android Virtual Devices. Please create at least one AVD."
        echo "android"
    fi
    # User has only one AVD
    if [ ${#avd_list[@]} == 1 ]
    then
        emulator -cpu-delay 0 -no-boot-anim -cache /tmp/cache -avd ${avd_list[0]} 1> /dev/null 2>&1 &
    # User has more than 1 AVD
    elif [ ${#avd_list[@]} -gt 1 ]
    then
        while [ -z ${avd_list[$avd_id]} ]
        do
            echo "Choose from one of the following Android Virtual Devices [0 to $((${#avd_list[@]}-1))]:"
            for(( i = 0 ; i < ${#avd_list[@]} ; i++ ))
            do
                echo "$i) ${avd_list[$i]}"
            done
            echo -n "> "
            read avd_id
        done
        emulator -cpu-delay 0 -no-boot-anim -cache /tmp/cache -avd ${avd_list[$avd_id]} 1> /dev/null 2>&1 &
    fi
    
}

function clean {
    ant clean
}
# has to be used independently and not in conjunction with other commands
function log {
    adb logcat
}

function debug {
    if [ $(check_devices) == 0 ] ; then
        ant debug install
    else
        ant debug
        echo "##################################################################"
        echo "# Plug in your device or launch an emulator with cordova/emulate #"
        echo "##################################################################"
    fi
}

function launch {
    local launch_str=$(java -jar $PROJECT_PATH/cordova/appinfo.jar $PROJECT_PATH/AndroidManifest.xml)
    adb shell am start -n $launch_str 
}

function BOOM {
    clean && debug && launch 
}

# TODO parse arguments
(cd $PROJECT_PATH && $1)
