#!/bin/bash
# Description: Email syncing tools plus the mu4e client
set -e

__MAXMESSAGES=100

function __certificatefile {
    for path in \
        /usr/local/etc/ssl \
        /usr/local/etc/openssl \
        /usr/local/etc/openssl@1.1 \
        /etc/ssl \
        /etc/openssl \
        ; do

        for certfile in \
            cert.pem \
            certs/ca-certificates.crt \
            ; do

            if test -f "${path}/${certfile}"; then
                echo "${path}/${certfile}"
                return
            fi
        done
    done
}

function __mbsync_config {
    cat > ${HOME}/.mbsyncrc <<EOF
IMAPAccount personal
Host imap.gmail.com
User correl@gmail.com
PassCmd "pass accounts.google.com/correl@gmail.com | grep ^isync: | awk '{print \$2}'"
AuthMechs LOGIN
SSLType IMAPS
SSLVersions TLSv1.2
CertificateFile $(__certificatefile)

IMAPStore personal-remote
Account personal

MaildirStore personal-local
Subfolders Verbatim
Path ~/Mail/Personal/
Inbox ~/Mail/Personal/INBOX

Channel personal
Far :personal-remote:
Near :personal-local:
MaxMessages ${__MAXMESSAGES}
ExpireUnread yes
Patterns "INBOX" "[Gmail]/Drafts" "[Gmail]/Sent Mail" "[Gmail]/Starred" "[Gmail]/All Mail" "[Gmail]/Chats" "[Gmail]/Trash"
Create Both
Expunge Both
SyncState *

IMAPAccount work
Host imap.gmail.com
User correlr@aweber.com
PassCmd "pass Work/aweber/accounts.google.com/correlr@aweber.com | grep ^isync: | awk '{print \$2}'"
AuthMechs LOGIN
SSLType IMAPS
SSLVersions TLSv1.2
CertificateFile $(__certificatefile)

IMAPStore work-remote
Account work

MaildirStore work-local
Subfolders Verbatim
Path ~/Mail/Work/
Inbox ~/Mail/Work/INBOX

Channel work
Far :work-remote:
Near :work-local:
MaxMessages ${__MAXMESSAGES}
ExpireUnread yes
Patterns "INBOX" "AWeber Times" "Jira" "[Gmail]/Drafts" "[Gmail]/Sent Mail" "[Gmail]/Starred" "[Gmail]/All Mail" "[Gmail]/Chats" "[Gmail]/Trash"
Create Both
Expunge Both
SyncState *
EOF
}

_recipe emacs
case $_PLATFORM in
    darwin)
        _recipe brew
        _brew isync
        EMACS=$(which emacs) _brew mu --HEAD
        ;;
    arch)
        _recipe _arch
        _pacman isync
        _yay mu
        ;;
    debian)
        _recipe _apt
        for dep in \
            build-essential \
                autoconf \
                automake \
                libtool \
                texinfo \
                libgmime-3.0-dev \
                libxapian-dev \
                guile-2.0-dev \
                html2text \
                xdg-utils \
                libwebkitgtk-dev \
                isync
        do
            _apt $dep
        done
        dir=`mktemp -d` && \
            pushd $dir >/dev/null
        if ! command -v mu >/dev/null; then
            echo "[tgz] Fetching mu"
            curl -sL https://github.com/djcb/mu/archive/master.tar.gz \
                | tar xz --strip 1 && \
                echo "[tgz] Configuring mu" && \
                ./autogen.sh >/dev/null 2>&1 && \
                ./configure --prefix=/usr >/dev/null 2>&1 && \
                echo "[tgz] Building mu" && \
                make >/dev/null 2>&1 && \
                echo "[tgz] Installing mu" && \
                sudo make install >/dev/null 2>&1
            popd >/dev/null
            rm -rf "$dir"
        fi
        ;;
esac

_run "[email] Creating mail directories" mkdir -p ${HOME}/Mail/{Personal,Work,.attachments}
_run "[email] Configuring mbsync" __mbsync_config
_run "[email] Initializing mail database" mu init -m ${HOME}/Mail \
    --my-address=correl@gmail.com \
    --my-address=correlr@aweber.com \
    --my-address=correlr@aweber.net
_run "[email] Indexing mail" mu index
_recipe nvm
_npm imapnotify