#!/bin/sh

set -eu

if [ "${GUEST_SESSION:-}" = 'true' ]; then
  exit 0
fi

mode=${1:-}

puavo_domain=$(cat /etc/puavo/domain)

user_primary_group=$(id -gn)

is_remotemounts_enabled=$(puavo-conf puavo.mounts.by_user_from_bootserver.enabled)
is_nethomes_enabled=$(puavo-conf puavo.mounts.nethomes.enabled)

filter_out_our_bookmarks() {
  local bookmarksfile
  local domain_regexp

  bookmarksfile=$1
  domain_regexp=$(echo "${puavo_domain}" | sed 's/\./\\./g')

  # Grep fails if the file is empty or missing, which is ok in this
  # situation: it just means that there is not anything to preserve
  # (or maybe means something else, but probably not serious).
  egrep -v "\.puavo-sharedir|^file:///home/share/|^smb://.*\.${domain_regexp}" \
    "$bookmarksfile" || true
}

update_bookmarks() {
  local bookmarksdir
  local bookmarksfile
  local schooldir_displayname
  local sharename
  local tmpfile
  local userdir_displayname
  local remote_host

  userdir_displayname=$1
  schooldir_displayname=$2
  sharename=$3
  bookmarksfile=$4

  bookmarksdir=$(dirname "${bookmarksfile}")
  mkdir -p "${bookmarksdir}"

  tmpfile="${bookmarksfile}.tmp"

  filter_out_our_bookmarks "${bookmarksfile}" > "${tmpfile}"

  if [ "${is_nethomes_enabled}" = 'true' ]; then
    echo "file:///home/share/${sharename}/${user_primary_group} ${schooldir_displayname}" >> "${tmpfile}"
  fi

  if [ "${is_remotemounts_enabled}" = 'true' ]; then
      remote_host=$(dig SRV "_sambaserver._tcp.${puavo_domain}" +short \
          | sed -r -n 's/^[0-9]+ [0-9]+ 139 (.*)\./\1/p' | head -n1)
      if [ -n "${remote_host}" ]; then
          echo "smb://${remote_host}/${USER} ${userdir_displayname}"
          echo "smb://${remote_host}/share/${sharename}/${user_primary_group} ${schooldir_displayname}"
      fi >>"${tmpfile}"
  fi

  mv "${tmpfile}" "${bookmarksfile}"
}

case "$(echo $LANG | cut -c 1-2)" in
  de)
    schooldir_displayname='Geteilte Dateien'
    sharename='geteilt'
    userdir_displayname='Netzwerkordner'
    ;;
  fi)
    schooldir_displayname='Yhteiset'
    sharename='yhteiset'
    userdir_displayname='Verkkokansio'
    ;;
  sv)
    schooldir_displayname='Delade filer'
    sharename='delade_filer'
    userdir_displayname='Nätverksmapp'
    ;;
  *)
    schooldir_displayname='Share'
    sharename='share'
    userdir_displayname='Network folder'
    ;;
esac

for bookmark_file in ~/.config/gtk-3.0/bookmarks ~/.gtk-bookmarks; do
  update_bookmarks "$userdir_displayname"   \
                   "$schooldir_displayname" \
                   "$sharename"             \
                   "$bookmark_file"
done

# Handle links from user home directory to gvfs-mounts for applications
# that do not understand gvfs (and do not know about gtk-bookmarks).
# "puavo-remotemounts-helper" handles these for those that have
# "puavo.mounts.by_user_from_bootserver.enabled" == true
# (but --with-cleanups is useful also in that case).

if [ "$mode" = '--with-cleanups' ]; then
  rmdir ~/.puavo-sharedir.schooldir 2>/dev/null || true

  # remove stale links (maybe created later)
  for linkname in 'Geteilte Dateien' 'Yhteiset'     'Delade filer' 'Share' \
                  'Netzwerkordner'   'Verkkokansio' 'Nätverksmapp' 'Network folder'; do
    [ -h ~/"$linkname" ] && rm -f ~/"$linkname"
  done
fi

if [ "${is_nethomes_enabled}" = 'true' ]; then
  ln -fns "/home/share/${sharename}/${user_primary_group}" \
          ~/"${schooldir_displayname}"
fi
