#!/bin/bash
set -e

# Source: https://github.com/sameersbn/docker-gitlab/
map_uidgid() {
    USERMAP_ORIG_UID=$(id -u paperless)
    USERMAP_ORIG_UID=$(id -g paperless)
    USERMAP_GID=${USERMAP_GID:-${USERMAP_UID:-$USERMAP_ORIG_GID}}
    USERMAP_UID=${USERMAP_UID:-$USERMAP_ORIG_UID}
    if [[ ${USERMAP_UID} != ${USERMAP_ORIG_UID} || ${USERMAP_GID} != ${USERMAP_ORIG_GID} ]]; then
        echo "Mapping UID and GID for paperless:paperless to $USERMAP_UID:$USERMAP_GID"
        groupmod -g ${USERMAP_GID} paperless
        sed -i -e "s|:${USERMAP_ORIG_UID}:${USERMAP_GID}:|:${USERMAP_UID}:${USERMAP_GID}:|" /etc/passwd
    fi
}

set_permissions() {
    # Set permissions for consumption directory
    chgrp paperless "$PAPERLESS_CONSUMPTION_DIR" || {
        echo "Changing group of consumption directory:"
        echo "  $PAPERLESS_CONSUMPTION_DIR"
        echo "failed."
        echo ""
        echo "Either try to set it on your host-mounted directory"
        echo "directly, or make sure that the directory has \`o+x\`"
        echo "permissions and the files in it at least \`o+r\`."
    } >&2
    chmod g+x "$PAPERLESS_CONSUMPTION_DIR" || {
        echo "Changing group permissions of consumption directory:"
        echo "  $PAPERLESS_CONSUMPTION_DIR"
        echo "failed."
        echo ""
        echo "Either try to set it on your host-mounted directory"
        echo "directly, or make sure that the directory has \`o+x\`"
        echo "permissions and the files in it at least \`o+r\`."
    } >&2

    # Set permissions for application directory
    chown -Rh paperless:paperless /usr/src/paperless
}

initialize() {
    map_uidgid
    set_permissions
}

install_languages() {
    local langs="$1"
    read -ra langs <<<"$langs"

    # Check that it is not empty
    if [ ${#langs[@]} -eq 0 ]; then
        return
    fi

    # Update apt-lists
    apt-get update

    # Loop over languages to be installed
    for lang in "${langs[@]}"; do
        pkg="tesseract-ocr-$lang"
        if dpkg -s "$pkg" 2>&1 > /dev/null; then
            continue
        fi

        if ! apt-cache show "$pkg" 2>&1 > /dev/null; then
            continue
        fi

        apt-get install "$pkg"
    done

    # Remove apt lists
    rm -rf /var/lib/apt/lists/*
}


if [[ "$1" != "/"* ]]; then
    initialize

    # Install additional languages if specified
    if [ ! -z "$PAPERLESS_OCR_LANGUAGES"  ]; then
        install_languages "$PAPERLESS_OCR_LANGUAGES"
    fi

    exec sudo -HEu paperless "/usr/src/paperless/src/manage.py" "$@"
fi

exec "$@"