#!/bin/sh
# 2016-06-24: Updated to handle cpjs using project-specific files.
# 2014-12-18: Updated to use GIANT_DATA_DIR in addition to BIO_DATA_DIR
# 2012-02-28: Version 0.2.0a
# 2012-02-28: Changed to handle spaces in project names
# 2007-09-13: Version 0.2.0
#             Changed to use more standard versioning.
# 2007-09-13: Version 1.2g
# 2007-09-13: Made it use anim instead of anim/source if anim/source
#             doesn't exist.
# 2007-07-06: Version 1.2f
# 2007-07-06: Fixed problem trying to rename projects with extra .prj extension
# 2007-07-06: Fixed bug with renaming image directory.
# 2007-06-29: Now renames source anims and refined anims
# 2007-05-07: Fixed subdir handling
# 2007-04-27: Now handles subdirs of capture. i.e.
#               renameprj olddir/myproject newdir/newproject

data_dir=${GIANT_DATA_DIR%/}

if [ "$data_dir" = "" ]; then
  data_dir=${BIO_DATA_DIR%/}
fi

if [ $# = 0 ]; then
  echo "renameprj 0.2.0b"
  echo
  echo "Usage: renameprj <old name> <new name>"
  echo
  echo "Description:  Copies a project file, the project directory, and "
  echo "all files in the project directory to the new name."
  echo "Do not use the .prj extension when specifying a project name"
  echo
  echo "Example: renameprj scenes/053/wrongname scenes/053/rightname"
  echo
  exit
fi
old_name=$1
new_name=$2
strip_prj=0
if [ ! -d "$old_name" ]; then
  stripped_old_name=`echo "$old_name" | sed 's/\.prj$//'`
  if [ x"$stripped_old_name" != x"$old_name" ]; then
    strip_prj=1
    old_name=$stripped_old_name
  fi
fi
if [ $strip_prj = 1 ]; then
  new_name=`echo "$new_name" | sed 's/\.prj$//'`
fi
tmp_name=$new_name.tmp$$
capture_dir=$data_dir/capture
old_prj=$capture_dir/$old_name.prj
new_prj=$capture_dir/$new_name.prj
tmp_prj=$capture_dir/$tmp_name.prj
old_dir=$capture_dir/$old_name
new_dir=$capture_dir/$new_name
tmp_dir=$capture_dir/$tmp_name
old_basename=`basename "$old_name"`
new_basename=`basename "$new_name"`
if [ ! -f "$old_prj" ]; then
  echo >&2
  echo "Project file $old_prj does not exist" >&2
  echo >&2
  exit
fi
if [ -e "$new_prj" ]; then
  if [ x"$new_prj" != x"$old_dir" ]; then
    echo >&2
    echo "$new_prj already exists" >&2
    echo >&2
    exit
  fi
fi
if [ ! -d "$old_dir" ]; then
  echo >&2
  echo "Project directory $old_dir does not exist" >&2
  echo >&2
  exit
fi
if [ -e "$new_dir" ]; then
  if [ x"$new_dir" != x"$old_prj" ]; then
    echo >&2
    echo "$new_dir already exists" >&2
    echo >&2
    exit
  fi
fi


rename_components () {
# Change capture/dir1/name1/name1.bmo to capture/dir2/name2/name2.bmo
# Change capture/dir1/name1/images/1.jpeg to capture/dir2/name2/images/1.jpeg
  local old_prj=$1
  local tmp_prj=$2
  (
  awk \
  -v old_name="$old_name" \
  -v old_basename="$old_basename" \
  -v new_name="$new_name" \
  -v new_basename="$new_basename" \
  '
    {
      if (!gsub(old_name"/"old_basename,new_name"/"new_basename)) {
        gsub(old_name,new_name)
      }
      print
    }
  ' <"$old_prj" >"$tmp_prj"
  ) 2>/dev/null
}

rename_components $old_prj $tmp_prj


if [ $? != 0 ]; then
  echo "Couldn't create $tmp_prj" >&2
  exit 1
fi
mkdir "$tmp_dir" || exit 1
if [ -d "$old_dir/images" ]; then
  mv -i "$old_dir/images" "$tmp_dir/."
fi

for arg in "$old_dir"/*; do
  newarg=`echo $arg | sed "
s%$old_name/$old_basename%$tmp_name/$new_basename%
t
s%$old_name%$tmp_name%
"
`
  mv -i "$arg" "$newarg"
done
rmdir "$old_dir"
rm "$old_prj"
mv -i "$tmp_dir" "$new_dir"
mv -i "$tmp_prj" "$new_prj"

oldname=$old_name 
newname=$new_name
animdir=$data_dir/anim/source
refinedir=$data_dir/anim/refined
if [ ! -d "$animdir" ]; then
  animdir=$data_dir/anim
fi
if [ -f "$animdir/$oldname.anm" -a -f "$animdir/$newname.anm" ]; then
  echo "$animdir/$newname.anm already exists"
  exit 1
fi
if [ -f "$animdir/$oldname.refine.anm" -a -f "$animdir/$newname.refine.anm" ]; then
  echo "$animdir/$newname.refine.anm already exists"
  exit 1
fi
if [ -f "$animdir/$oldname.anm" ]; then
  sed 's%'"$oldname"'/'"$oldname"'.bmo%'"$newname"'/'"$newname"'.bmo%' <"$animdir/$oldname.anm" >"$animdir/$newname.anm"
  rm "$animdir/$oldname.anm"
  echo "Also renamed source anim"
fi
if [ -f "$animdir/$oldname.refine.anm" ]; then
  sed 's%'"$oldname"'/'"$oldname"'.refine.bmo%'"$newname"'/'"$newname"'.refine.bmo%' <"$animdir/$oldname.refine.anm" >"$animdir/$newname.refine.anm" || exit 1
  rm "$animdir/$oldname.refine.anm"
  echo "Also renamed refined anim"
fi
if [ -f "$refinedir/$oldname.rs.anm" ]; then
  sed 's%'"$oldname"'/'"$oldname"'.rs_s40.bmo%'"$newname"'/'"$newname"'.rs_s40.bmo%' <"$refinedir/$oldname.rs.anm" >"$refinedir/$newname.rs.anm" || exit 1
  rm "$refinedir/$oldname.rs.anm"
  echo "Also renamed rs anim"
fi
cpj=$new_dir/$new_basename.cpj
if [ -f "$cpj" ]; then
  rename_components $cpj $cpj.tmp || exit 1
  mv $cpj.tmp $cpj || exit 1
fi
