#!/bin/sh
#Read list PFS packages
#VERSION 4.4

if [ -f $(dirname $0)/pfs ] ;  then
    . $(dirname $0)/pfs
else 
    . $(which pfs) || exit 13 
fi    

HLP(){
echo   "Usage: $0 <par>"
echo   "-d --delimeter	  separator character" 
echo   "-s --stat         statistic"
echo   "-m --mount   mount submodules"
echo   "-i --install      installed submodules"
exit 1
}

DELIMITER='/'
for arg in "$@"
do
  case "${arg}" in
	"-d" | "--delimiter" ) delimiter='yes' ;;
	"-h" | "--help" ) HLP ;;
    "-s" | "--stat") stat="yes";;
    "-m" | "--mount" | "--mount-packages") readdir="mount";;
    "-i" | "--install" | "--install-packages") readdir="install";;
    "-"*[A-Za-z]*) echo "$(basename "$0"): invalid option -- '$(echo ${arg} | tr -d '-')'" >&2; exit 1;;
    *) 	if [ "$delimiter" = 'yes' ] ; then
			DELIMITER="$arg"
		else 
			inpack="${arg}"
		fi
		delimiter='no';;
  esac
done

if [ "${inpack}" ]; then
  if [ -f "${inpack}" ]; then 
    pack="$(realpath "${inpack}")"
  else
    echo "File \"${inpack}\" not found!" >&2; exit 1
  fi
fi

if [ "${pack}" ]; then
  disktypeb "${pack}" | grep -qi "squashfs.*version\ *4\."
  exitmsg "File \"$1\" is not PFS!" $?
  if [ "${stat}" ] ; then
	Comptype=$(unsquashfs -s  "${pack}" |grep ompression |awk '{print $NF}' | tr "\n" " ")
	[ "$Comptype" ] || exitmsg "$pack Is non squashfs module" 1
	bpack=$(basename ${pack})
	mkdir -p /tmp/squashfs/"${bpack}"
	mount -t squashfs -o loop -o ro "${pack}" /tmp/squashfs/"${bpack}"
	[ -e /tmp/squashfs/${bpack}${PFSDIR}/mount ] && ispfs=yes
	
	if [ "$ispfs" = "yes" ] ; then
		Deps=$(find /tmp/squashfs/${bpack}${PFSDIR}/mount  -type f -name pfs.depends -exec cat "{}" \; |sort |uniq |grep -v "^$" | tr "\n" "   ")
		Packs=$(find /tmp/squashfs/${bpack} | grep ${PFSDIR}/.*/pfs.files |sed -e "s:/tmp/squashfs/${bpack}${PFSDIR}/mount/::" -e 's:/submod/mount::g' -e 's:/pfs.files$::' -e 's#/#'$DELIMITER'#g' | tr "\n" "   ")
		[ -f /tmp/squashfs/${bpack}${PFSDIR}/INFO ] && cat /tmp/squashfs/${bpack}${PFSDIR}/INFO |sed 's/=/: /'
		echo "Dependencies: $Deps"
		echo "Modules: $Packs"
		echo ''
		echo ''
		standard_files="pfs.files pfs.depends pfs.dirs.empty"
		for file in $(find /tmp/squashfs/${bpack}${PFSDIR}/mount  -type f) ; do
			if ! echo $standard_files | grep -q $(basename $file) ; then
				echo "[ $(echo $file |sed "s:/tmp/squashfs/${bpack}::")  ]"
				cat $file |grep -v "^$"
				echo ''
		fi
		done
	else 
		echo "Modules: -----"
		echo "Dependencies:  -----"
	fi

	Msize=$(du -s ${pack} |cut -f1) 
	Usize=$(du -s  /tmp/squashfs/"${bpack}" |cut -f1)
	echo "Compression algorithm: $Comptype"
	echo "Module size: $(du -hs ${pack} |cut -f1)"
	echo "Uncompressed size: $(du -hs  /tmp/squashfs/"${bpack}" |cut -f1)"
	echo "Compression ratio: $( echo "$((Usize/$Msize))") ($( echo "$((100*$Msize /$Usize))")%)"
		
	umount /tmp/squashfs/"${bpack}"
	rmdir  /tmp/squashfs/"${bpack}"
  else
  unsquashfs -l -d ""  "${pack}"  | grep ${PFSDIR}/.*/pfs.files |sed -e "s#${PFSDIR}/mount/##" -e 's#/submod/mount##g' -e 's#/pfs.files$##' -e 's#/#'"$DELIMITER"'#g'
  fi
else
  [ "${readdir}" != "install" ] && [ -d "${PFSDIR}/mount" ] && echo "$(find "${PFSDIR}/mount/" -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | sort -f)"
  [ "${readdir}" != "mount" ] && [ -d "${PFSDIR}/install" ] && echo "$(find "${PFSDIR}/install/" -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | sort -f)"
fi
exit 0
