#!/bin/bash

export ANALYZER_PATH_BUGREPORT=
export ANALYZER_PATH_DUMPFILE=
export ANALYZER_PATH_OUTPUT=output
export ANALYZER_PATH_TESTCASE='reporter/default.testcase'

export ANALYZER_DUMP_ALARM=
export ANALYZER_DUMP_BATTERY_DISCHARGED=
export ANALYZER_DUMP_BATTERY_STAT=
export ANALYZER_DUMP_BATTERY_TOTALWAKE=
export ANALYZER_DUMP_PACKAGE=

source alarm/*
source battery/battery_analyzer.sh
source battery/batterystats_parser.sh
source package/*
source reporter/reporter.sh
source utils/time_utils.sh
source utils/zip_utils.sh

ANALYZER_PATH_BUGREPORT="$1"
shift

trap analyzer_exit SIGHUP SIGINT SIGTERM EXIT

function analyzer_info() {
    printf "* %.0s" {1..50}
    echo
    printf "%-32s%-2s%s\n" ANALYZER_PATH_BUGREPORT = "$ANALYZER_PATH_BUGREPORT"
    printf "%-32s%-2s%s\n" ANALYZER_PATH_DUMPFILE = "$ANALYZER_PATH_DUMPFILE"
    printf "* %.0s" {1..50}
    echo
}

function analyzer_exit() {
    local exitcode="$1"
    [ "$exitcode" == "" ] && exitcode=0

    printf "x %.0s" {1..50}
    echo

    trap - SIGHUP SIGINT SIGTERM EXIT

    echo "analyzer_exit"

    [ "$ANALYZER_PATH_DUMPFILE" != "" ] && { \
        echo "Unlinking $ANALYZER_PATH_DUMPFILE"
        unlink "$ANALYZER_PATH_DUMPFILE"
    }

    unset ANALYZER_PATH_BUGREPORT
    unset ANALYZER_PATH_DUMPFILE

    unset ANALYZER_DUMP_ALARM
    unset ANALYZER_DUMP_BATTERY_DISCHARGED
    unset ANALYZER_DUMP_BATTERY_STAT
    unset ANALYZER_DUMP_BATTERY_TOTALWAKE
    unset ANALYZER_DUMP_PACKAGE

    printf "x %.0s" {1..50}
    echo

    wait
    exit "$exitcode"
}

function analyzer_alarm() {
    ANALYZER_DUMP_ALARM=`alarm_getdump "$ANALYZER_PATH_DUMPFILE"`
: << debugprint
    printf "<ALARM>\t\t\t%.0s" {1..4}
    echo
    echo -e "$ANALYZER_DUMP_ALARM"
    printf "<ALARM>\t\t\t%.0s" {1..4}
    echo
debugprint

    ANALYZER_DUMP_ALARM=
}

function analyzer_battery() {
    ANALYZER_DUMP_BATTERY_DISCHARGED=`batterystats_get_powerdischargedump "$ANALYZER_PATH_DUMPFILE"`
: << debugprint
    printf "<BATTERY_DISCHARGED>\t\t\t%.0s" {1..4}
    echo
    echo -e "$ANALYZER_DUMP_BATTERY_DISCHARGED"
    printf "<BATTERY_DISCHARGED>\t\t\t%.0s" {1..4}
    echo
debugprint

    ANALYZER_DUMP_BATTERY_STAT=`batterystats_get_statisticsdump "$ANALYZER_PATH_DUMPFILE"`
: << debugprint
    printf "<BATTERY_STAT>\t\t\t%.0s" {1..4}
    echo
    echo -e "$ANALYZER_DUMP_BATTERY_STAT"
    printf "<BATTERY_STAT>\t\t\t%.0s" {1..4}
    echo
debugprint

    ANALYZER_DUMP_BATTERY_TOTALWAKE=`batterystats_parse_get_totalwake_actualpartial_dump "$ANALYZER_PATH_DUMPFILE"`
: << debugprint
    printf "<BATTERY_TOTALWAKE>\t\t\t%.0s" {1..4}
    echo
    echo -e "$ANALYZER_DUMP_BATTERY_TOTALWAKE"
    printf "<BATTERY_TOTALWAKE>\t\t\t%.0s" {1..4}
    echo
debugprint

    battery_analyze

    unset ANALYZER_DUMP_BATTERY_DISCHARGED
    unset ANALYZER_DUMP_BATTERY_STAT
    unset ANALYZER_DUMP_BATTERY_TOTALWAKE
}

function analyzer_package() {
    local package_dump_full=`package_getdump "$ANALYZER_PATH_DUMPFILE"`
    ANALYZER_DUMP_PACKAGE=`package_get_pkgsummary "$package_dump_full"`
    unset package_dump_full
: << debugprint
    printf "<PACKAGE>\t\t\t%.0s" {1..4}
    echo
    echo -e "$ANALYZER_DUMP_PACKAGE"
    printf "<PACKAGE>\t\t\t%.0s" {1..4}
    echo
debugprint

    # unset ANALYZER_DUMP_PACKAGE
}

[ "$ANALYZER_PATH_BUGREPORT" == "" ] && { \
    echo "Empty bugreport file"
    analyzer_exit 127
}

ANALYZER_PATH_DUMPFILE=`zip_bugreport_extract "$ANALYZER_PATH_BUGREPORT" "$ANALYZER_PATH_OUTPUT"`
[ "$ANALYZER_PATH_DUMPFILE" == "" ] && { \
    echo "Failed to parse bugreport"
    analyzer_exit 126
}

analyzer_info

analyzer_package
analyzer_alarm
analyzer_battery

reporter_get_result_full

alarm_analyze_summary "$ANALYZER_PATH_DUMPFILE" "$ANALYZER_DUMP_PACKAGE"
battery_analyze_summary "$ANALYZER_PATH_DUMPFILE"

analyzer_exit

