#!/bin/bash -
# -*- coding: utf-8; indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*-
# vim:fileencodings=utf-8:expandtab:tabstop=4:shiftwidth=4:softtabstop=4

PROJECT=
SERIES=
PLATFORM=
TASK=task
RUNROOT=/tmp/volatile-run-task

die()
{
    echo -e "Error: $1"
    exit 1
}

usage()
{
    [[ -n $1 ]] && echo $1
    echo "Create volatile-task-core tasks folder"
    echo
    echo "usage: ${0##*/} [OPTION] <task name>"
    echo
    echo "  [OPTION]"
    echo "      -p|--project   Specify project name"
    echo "      -s|--series    Specify series name"
    echo "      -o|--output    Specify output directory"
    echo "      -T|--task-root Specify task root"
    echo
    exit 0
}

log()
{
    echo $@ >&2
}

check_param()
{
    local param=$1
    local opt=$2
    [[ -n "$param" && ! "$param" =~ ^\-.* ]] && \
        return 0
    return 1
}

copy_oobetask_files()
{
    local _src=$1
    local _dst=$2

    for _t in $(find $RCPATH/default -maxdepth 1 -type d -printf '%P ')
    do
        mkdir -p $_dst/$_t
        copy_task_files $_src/$_t $_dst/$_t
    done
}

copy_task_files()
{
    local _src=$1
    local _dst=$2

    if [[ ! -d $_src || ! -d $_dst ]]; then
        return 0
    fi

    log "Copy task scripts from $_src to $_dst"
    find $_src -maxdepth 1 -type f -print | xargs -i cp -fp '{}' $_dst
    return 0
}

# define copy method
copy_files=copy_task_files

while [[ "$1" ]];
do
    case "$1" in
        -x|--debug)
            set -x
        ;;
        -p|--project)
            if check_param $2; then
                PROJECT=$2
                shift
            fi
        ;;
        -s|--series)
            if check_param $2; then
                SERIES=$2
                shift
            fi
        ;;
        -o|--output)
            if check_param $2; then
                RUNROOT=$2
                shift
            fi
        ;;
        -T|--task-root)
            if check_param $2; then
                RCPATH=$(readlink -f $2)
                shift
            fi
        ;;
        *task)
            TASK=$1
            [[ "$TASK" = "oobetask" ]] && \
                copy_files=copy_oobetask_files
        ;;
        -h|--help)
            usage
        ;;
        *)
            [[ -n "$1" ]] &&
                die "Unknown option or parameter \"$1\""
        ;;
    esac
    shift
done

[[ -z "$TASK" ]] && \
    die "Please specify task name"

OEMLIB=${OEMLIB:-'/usr/share/volatile'}

[[ ! -f "$OEMLIB/oem-common.sh" ]] && \
    die "You have to specify oem-common.sh path.\nUse export OEMLIB=<some where>" || \
    . $OEMLIB/oem-common.sh

PROJECT=${PROJECT:-$(get_project_name)}
SERIES=${SERIES:-$(get_project_series)}
RCPATH="${RCPATH:-"/usr/share/volatile"}/$TASK"

[[ -n "$SERIES" ]] && \
    PLATFORM=$(get_platform)

[[ ! -d "$RCPATH" ]] && \
    die "Cannot find $TASK in /usr/share/volatile\nUse -T to specify task root"

RUNROOT=$RUNROOT/$TASK
CURRDIR=$RCPATH

[[ ! -d $RUNROOT ]] && \
    mkdir -p $RUNROOT

# create default tasks
$copy_files $CURRDIR/default $RUNROOT

# prepare project/series/platform related tasks
for t in $PROJECT $SERIES $PLATFORM
do
    [[ ! -d $CURRDIR/$t ]] && \
        break

    CURRDIR=$CURRDIR/$t

    # create customized tasks
    $copy_files $CURRDIR $RUNROOT
done

[[ $? -eq 0 ]] && echo $(readlink -f $RUNROOT)
