#!/bin/bash

if [ $# -lt 1 ]; then
    echo "Usage: $0 bundle-dir"
    echo "  example: $0 /tmp/MyApp.app"
    exit 1
fi

set -eu

OUTPUT=$1

frameworks=$OUTPUT/Contents/F
resources=$OUTPUT/Contents/Resources
macos=$OUTPUT/Contents/MacOS
wrapper=$macos/Coy
binary=${wrapper}-bin

cellar=$(brew --prefix)/Cellar
gtk_prefix=$(pkg-config gtk+-3.0 --variable prefix)
gtk_version=$(pkg-config gtk+-3.0 --variable gtk_binary_version)

rm -rf $OUTPUT
mkdir -p $macos $frameworks $resources

cp -av bin/coyim $binary
cp -av build/mac-bundle/coyim-launcher.sh $wrapper
cp -av build/mac-bundle/Info.plist $OUTPUT/Contents/Info.plist
cp -av build/mac-bundle/coy.icns $resources
cp -av build/mac-bundle/environment.sh $resources

chmod a+x $wrapper $binary

rewrite_library() {
  for lib in $(otool -L $1 | grep "^\t$(brew --prefix)" | sed -e 's/^[^\/]*//' -e 's/ .*//'); do
    base=$(basename $lib)
    if [ ! -f $frameworks/$base ] ; then
      cp -v $lib $frameworks
    fi
    chmod u+w $1
    install_name_tool -change $lib @executable_path/../F/$base $1
    if [ $(basename $1) != $base ] ; then
      rewrite_library $frameworks/$base
    fi
  done
}

echo "** Copying dependencies for the binary"

for lib in $(otool -L $binary | grep "^\t$(brew --prefix)" | sed -e 's/^[^\/]*//' -e 's/ .*//'); do
  base=$(basename $lib)
  cp -v $lib $frameworks
  install_name_tool -change $lib "@executable_path/../F/$base" $binary
  rewrite_library $frameworks/$base
done

echo "** Copying libpango modules"

# FIXME Why in resources?
pango_lib=$(strings $frameworks/libpango-1.0.0.dylib | grep usr/local | grep lib)
cp -av $(dirname $pango_lib) $resources

# There is no pango modules anymore
#pango_etc=$(strings $frameworks/libpango-1.0.0.dylib  | grep usr/local | grep etc)
#cp -a $(dirname $pango_etc) $resources
#sed -i".bak" -e 's![^ ]*/\([^/ ]*\) !\1 !' $(find $resources -name pango.modules)

echo "** Copying gdk-pixbuf modules"

# We neeed pixbuf loaders to support different types of images (it is used for
# rendering icons, for instance)
pixbuf_moddir=$(pkg-config gdk-pixbuf-2.0 --variable=gdk_pixbuf_moduledir)
for loader in $pixbuf_moddir/*.so; do
  cp -v $loader $frameworks
  rewrite_library $frameworks/$(basename $loader)
done

# /usr/local/Cellar/gdk-pixbuf/2.32.1/lib/gdk-pixbuf-2.0/2.10.0/loaders/
gdk_pixbuf_prefix=$(pkg-config gdk-pixbuf-2.0 --variable prefix)
gdk_pixbuf_version=$(pkg-config gdk-pixbuf-2.0 --variable gdk_pixbuf_binary_version)
mkdir -p $resources/lib/gdk-pixbuf-2.0/$gdk_pixbuf_version
gdk-pixbuf-query-loaders | sed "s|$gdk_pixbuf_prefix/lib/gdk-pixbuf-2.0/$gdk_pixbuf_version/loaders/|../F/|g" \
  > $resources/lib/gdk-pixbuf-2.0/$gdk_pixbuf_version/loaders.cache 

echo "** Copying input method modules"

# input methods modules
immodules_dir=$gtk_prefix/lib/gtk-3.0/$gtk_version/immodules/
for module in $immodules_dir/*.so; do
  cp -v $module $frameworks
  rewrite_library $frameworks/$(basename $module)
done

mkdir -p $resources/etc/gtk-3.0
gtk-query-immodules-3.0 \
  | sed "s|$gtk_prefix/lib/gtk-3.0/$gtk_version/immodules/|@executable_path/../F/|g" \
  | sed "s|$gtk_prefix/share/locale|@executable_path/../Resources/share/locale|g" \
  > $resources/etc/gtk-3.0/gtk.immodules 

echo "** Copying icons and themes"

# Icons and themes
mkdir -p $resources/share/icons
cp -av $(brew --prefix gnome-icon-theme)/share/icons/* $resources/share/icons
cp -av $(brew --prefix hicolor-icon-theme)/share/icons/* $resources/share/icons

mkdir -p $resources/share/themes/Mac
cp -av $(brew --prefix gtk+3)/share/themes/Mac/* $resources/share/themes/Mac

# GSetting Schemas
# FIXME this will include schemas with org.gnome.* prefix which I think are
# not relevant to our application in this bundle (see the schemas folder below)
mkdir -p $resources/share/glib-2.0/schemas
cp -av $(brew --prefix)/share/glib-2.0/schemas/gschemas.compiled $resources/share/glib-2.0/schemas

mkdir -p $resources/etc/gtk-3.0
cat > $resources/etc/gtk-3.0/settings.ini << EOF
[Settings]
gtk-theme-name=Adwaita
EOF

echo "** Copying locale files and mime database"

# Copy locales from our app
cp -av i18n $macos/

# Copy mime database
mkdir -p $resources/share/mime
cp -av $(pkg-config shared-mime-info --variable=prefix)/share/mime/mime.cache \
  $resources/share/mime

#TODO: copy GTK/GLIB/* locales
#mkdir -p $resources/share/locale
#for dir in $(find $cellar -name locale -type d); do
#  cp -a $dir/* $resources/share/locale
#done

# Remove all non en locales
#(
#  cd $resources/share/locale
#  find . ! -path . -type d -maxdepth 1 | grep -v '^\./en' | xargs rm -Rf
#)

# We might need this, but not now
#for lib in $(ls -1 $frameworks); do
#    ../pathrewrite/pathrewrite $frameworks/$lib
#  done
#done

