#!/bin/bash
#*******************************************************************
# ݲòƲ
#*******************************************************************
#$1: config file name, like: plugin.config(format: ini)
#$2: package directory, like: /disk1/ap135/torchlight/bin/ar71xx/packages
#$3: plugin directory, like: /disk1/ap135/torchlight/plugin
#$4: plugin tool's parent path, like: /disk1/ap135/torchlight/staging_dir/host/bin
#$5: ipkg-tar path, like: /disk1/ap135/torchlight/scripts/ipkg-tar
#$6: plugin name, like: dmz
#*******************************************************************

CONFIG_FILE=$1
PKG_DIR=$2
PLUGIN_DIR=$3
PACK_PLUGIN_PROG=$4/pack-plugin
PACK_IPKS_PROG=$4/make-plugin
MD5SUM_HALF_CHECK=$4/md5sum-half-check
IPKG_TAR_SCRIPT=$5/ipkg-tar
PLUGIN_ID=$6

PLUGIN_CONFIG="plugin.config"
IPK_DIR="IPKS"
PRE_STORED_PLUGIN_LIST_FILE="plugin.pre"
FACTORY_CONFIG="factory.config"

total_size=0
conponents=
md5=

# scan ipk dir, stat total installed-size, and log all names of ipk
scan_ipks()
{
	local comp_dir="$1"
	local ipks=`ls $comp_dir/ | grep .ipk`
	local pkg
	local size
	local name

	for pkg in $ipks;do
		if [ -d $pkg ];then
			:
		else
			size=`$IPKG_TAR_SCRIPT $comp_dir/$pkg ./control.tar.gz | tar xzOf - ./control | grep "Installed-Size" | cut -d" " -f2`
			let "total_size += $size"

			name=`$IPKG_TAR_SCRIPT $comp_dir/$pkg ./control.tar.gz | tar xzOf - ./control | grep "Package" | cut -d" " -f2`
			conponents="$conponents $name"
		fi
	done
}

# pack all ipks to a single data file
pack_ipks()
{
	$PACK_IPKS_PROG -t 0 -d "$1" -f "$2"
}

# check integrity of PLUGININFO file
check_integrity()
{
	:
}

calc_md5()
{
	md5=`md5sum -b "$1" | cut -d " " -f1`
}

# set plugin_id/size/md5/components
render_plugin_info()
{
	echo "plugin_id is $1"
	sed -i -e "s/^plugin_id:.*/plugin_id:$1/" "$2"
	sed -i -e "s/^size:.*/size:$total_size/" "$2"
	sed -i -e "s/^md5:.*/md5:$md5/" "$2"
	sed -i -e "s/^components:.*/components:$conponents/" "$2"
}

build_plugin()
{
	local section
	local configfile=$2
	local parts_dir
	local plugin_id
	local plugin_version
	local plugin_name
	local plugin_size
	local plugin_tag
	local plugin_components
	local plugin_author
	local plugin_weburi
	local plugin_webicon
	local plugin_appicon
	local plugin_appzip
	local plugin_bin
	local date_now=`date "+%y%m%d"`
	local release_time=`date "+%Y-%m-%d %H:%M:%S"`
	local plugin_install_dir
	local plugin_suffix

	plugin_id=${PLUGIN_ID}
	echo $plugin_id >> ${PLUGIN_DIR}/${PRE_STORED_PLUGIN_LIST_FILE}
	for key in ver name size tag comp author weburi webicon appicon appzip bin install_dir suffix model_name
	do
		plugin_key="plugin_$key"
		plugin_val=$(awk -F '=' '/\['"${PLUGIN_ID}"'\]/{a=1}a==1&&$1~/'"plugin_${key}"'/{gsub(/[[:blank:]]*/,"",$2);print $2;exit}' ${configfile})
		case $key in
			ver)
				plugin_version="$plugin_val"
			;;
			name)
				plugin_name="$plugin_val"
			;;
			size)
				plugin_size="$plugin_val"
			;;
			tag)
				plugin_tag="$plugin_val"
			;;
			comp)
				plugin_components="$plugin_val"
			;;
			author)
				plugin_author="$plugin_val"
			;;
			weburi)
				plugin_weburi="$plugin_val"
			;;
			webicon)
				plugin_webicon="$plugin_val"
			;;
			appicon)
				plugin_appicon="$plugin_val"
			;;
			appzip)
				plugin_appzip="$plugin_val"
			;;
			bin)
				plugin_bin="$plugin_val"
			;;
			install_dir)
				plugin_install_dir="$plugin_val"
			;;
			suffix)
				plugin_suffix="$plugin_val"
			;;
			model_name)
				section="$plugin_val"
		esac
		echo "plugin_$key is ${plugin_val}"
	done

	echo "components is $plugin_components"
#	plugin_components=${plugin_components//","/" "}
	plugin_components=`echo $plugin_components | sed 's/,/ /g'`


	local components_path=${PLUGIN_DIR}/${section}_${plugin_id}/${IPK_DIR}/
	local ipks_data=${PLUGIN_DIR}/${section}_${plugin_id}/${plugin_id}.data
#	local plugin_info=${PLUGIN_DIR}/${section}_${plugin_id}/${plugin_id}.info

	# IPKSĿ¼ΪҪĿ¼֮ǰӦա
	if [ -d "${components_path}" ]; then
		rm -rf ${components_path}
	fi

	mkdir -p ${components_path}

	for ipk in $plugin_components; do
		for cmp in `ls ${PKG_DIR}/${plugin_version}/${ipk}*`; do
			${MD5SUM_HALF_CHECK} $cmp | cut -d " " -f1 > ${components_path}/${cmp##*/}_md5
			echo $cmp ${components_path}
			cp $cmp ${components_path}
		done
	done

	parts_dir="${PLUGIN_DIR}/${section}_${plugin_id}"

	# pack ipks
#	check_integrity
#	scan_ipks ${components_path}
	pack_ipks ${components_path} ${ipks_data}
#	calc_md5 ${ipks_data}
#	render_plugin_info ${plugin_id} ${plugin_info}

	# pack plugin
	${PACK_PLUGIN_PROG} -i "$plugin_id" -v "$plugin_version" -n "$plugin_name" -s "$plugin_size" -t "$plugin_tag" -c "$plugin_components" \
				-a "$plugin_author" -o "SLP" -d "$parts_dir/$plugin_id.data" -x "$parts_dir/$plugin_webicon" -y "$parts_dir/$plugin_appicon" \
				-z "$parts_dir/$plugin_appzip" -p "$parts_dir/${section}_${plugin_id}_${plugin_version}_${date_now}.bin"

	# isolate ipks with comma, but not space
	plugin_components=`echo $plugin_components | sed 's/ /,/g'`

	# generate factory config info
	cat <<EOF > $parts_dir/${FACTORY_CONFIG}
{
	"$plugin_id":{
		"plugin_name": "$plugin_name",
		"plugin_id": "$plugin_id",
		"plugin_ver": "$plugin_version",
		"plugin_size": $plugin_size,
		"plugin_author": "$plugin_author",
		"plugin_tag": "$plugin_tag",
		"plugin_comp": "$plugin_components",
		"plugin_install_dir": "$plugin_install_dir",
		"plugin_suffix": "$plugin_suffix"
	}
},
EOF
}

plugin_init()
{
	rm -rf ${PLUGIN_DIR}/${PRE_STORED_PLUGIN_LIST_FILE}
}

plugin_exit()
{
	local plugin_id

	while read plugin_id
	do
		echo "plugin_id is: $plugin_id"
		rm -rf ${PLUGIN_DIR}/${plugin_id}/${plugin_id}.data
		rm -rf ${PLUGIN_DIR}/${plugin_id}/${IPK_DIR}/*.ipk
	done < ${PLUGIN_DIR}/${PRE_STORED_PLUGIN_LIST_FILE}
}

#plugin_init

echo "ipkg-buildplugin $1 $2 $3 $4 $5 $6"
build_plugin  ${PLUGIN_ID}  ${CONFIG_FILE}
#plugin_exit
