#!/bin/sh -e

[ -n "$spt_dir" ] || spt_dir=/usr/share/spt3
. $spt_dir/init
[ -z "$debug"] || set -x
copy_type="${1:-image}"
files_list="$0.$copy_type"
[ -r "$files_list" ] || exit 0

Pwd=$(realpath "`pwd`")
Home=$(realpath "$HOME")

# copy files into FS image
copy_into_fs() {
  local shar_flags
  chroot_install sharutils
  Verbose "Copying files to filesystem image (via shar)"
  [ -n "$setup_dir" ] || setup_dir="$profile_dir/setup.d"
  [ -n "$files_script" ] || files_script="$setup_dir/000files"
  [ -n "$pass_dir" ] || pass_dir="$tmp_dir/.pass"
  [ -n "$user_home" ] || user_home="/home/skel"
  [ -n "$verbose" ] && shar_flags="" || shar_flags="-q -Q"

  rm -rf "$pass_dir" "$files_script"

  sed "s|^~|$Home|g" < "$files_list" | while read src dst
  do
    case "$src" in
      ""|\#) continue ;;
    esac
    rsrc=$(dirname "$(realpath $src)")
    case "$rsrc" in
      $Pwd/root/*) dstold="$pass_dir/`relative $rsrc $Pwd/root/`" ;;
      $Home/*) dstold="$pass_dir$user_home/`relative $rsrc $Home/`" ;;
      $Pwd/*) dstold="$pass_dir$user_home" ;;
      /*) dstold="$pass_dir`dirname $src`" ;;
    esac
    case "$dst" in
      "") dst="$dstold" ;;
      /*) dst="$pass_dir$dst" ;;
      [^/]*) dst="$pass_dir$user_home$dst" ;;
    esac
    Verbose "	...$src"
    mkdir -p "$dst"
    cp -a "$src" "$dst"
  done
  # if sample home is created
  ( cd "$profile_dir/home" 2>/dev/null && Verbose "	patching Home" && mkdir -p "$pass_dir$user_home" && cp -a . "$pass_dir$user_home" || : ) 
  # if sample root is also here
  ( cd "$profile_dir/root" 2>/dev/null && Verbose "	patching Root" && cp -a . "$pass_dir" || : ) 
  # ok, make a shar
  ( echo "#!/bin/sh"
    echo "cd /"
    cd "$pass_dir" && shar $shar_flags .
  ) > "$files_script"
}

copy_into_iso() {
  local cp_flags
  [ -n "$verbose" ] && cp_flags="-avu" || cp_flags="-au"
  Verbose "Copying files to ISO image"
  sed "s|^~|$HOME|g" < "$files_list" | while read src dst
  do
    case "$src" in
      ""|\#) continue ;;
    esac
    case "$dst" in
      "") dst="$out_dir" ;;
      *) dst="$out_dir/$dst" ;;
    esac
    Verbose "	...$src"
    mkdir -p "$dst"
    cp $cp_flags "$src" "$dst"
  done
}

case "$copy_type" in
  image) copy_into_fs ;;
  iso) copy_into_iso ;;
  *) Fatal "Unknown copy type '$copy_type'" ;;
esac