#!/bin/bash
myuser="${1}"
gettype="${2:-merged}"

markmineread=false
open_count=0
merge_count=0
open_notis_count=0
fcount=0

if [ "${gettype}" == "cleanup" ]; then
    gettype="merged"
    markmineread=true
fi

if [ "${gettype}" == "show" ]; then
    tea notification ls --mine | less
    exit 0
fi

if [ "${gettype}" == "merged" ]; then
    open_noti=$(tea notification ls --mine | grep -E "^\| +[0-9]+.* Pull .* open " | sed -E 's/[ \|]/@@/g;s/@@+/@@/g;s/^@@//g;s/@@$//g')

    for merged_noti in $(tea notification ls --mine | grep -E "^\| +[0-9]+.* Pull .* merged " | sed -E 's/[ \|]/@@/g;s/@@+/@@/g;s/^@@//g;s/@@$//g'); do
        mark_read=false
        noti_id="$(grep -oE "^[0-9]+" <<<"${merged_noti}")"
        noti_pr_id="$(grep -oE '@@#[0-9]+@@' <<<"${merged_noti}" | sed -e 's/[@#]//g')"
        noti_repo="$(grep -oE '@[a-z0-9_.-]+.[a-z0-9_.-]+$' <<<"${merged_noti}" | sed -e 's/@//g')"

        pr_info=$(tea pr ls --state all --repo "${noti_repo}" | grep -E "^\| +${noti_pr_id} .* closed ")
        if grep -qE " closed +\| +${myuser} +\|" <<<"${pr_info}"; then
            if $markmineread ; then
                mark_read=true
            else
                let merge_count+=1
            fi
        elif grep -qE " closed +\| +[a-zA-Z]+ [a-zA-Z]+ +\|" <<<"${pr_info}"; then
            mark_read=true
        fi

        if $mark_read ; then
            tea notification read ${noti_id} &>/dev/null
        fi

        if open_merge_noti=$(grep -q " #${noti_pr_id} " <<<"${open_noti}"); then
            tea notification read $(sed -E 's/^\| +([0-9]+) .*/\1/g' <<<"${open_merge_noti}") &>/dev/null
        fi

    done
elif [ "${gettype}" == "open_all" ]; then
    open_notis=$(tea notification ls --mine | grep -E "^\| +[0-9]+.* Pull .* open " | sed -E 's/[ \|]/@@/g;s/@@+/@@/g;s/^@@//g;s/@@$//g')
    if [ -n "${open_notis}" ]; then
        open_notis_count=$(wc -l <<<"${open_notis}")
    fi
elif [ "${gettype}" == "open" ]; then
    open_notis=$(tea notification ls --mine | grep -E "^\| +[0-9]+.* Pull .* open " | sed -E 's/[ \|]/@@/g;s/@@+/@@/g;s/^@@//g;s/@@$//g')
    for open_noti in ${open_notis}; do
        noti_id="$(grep -oE "^[0-9]+" <<<"${open_noti}")"
        noti_pr_id="$(grep -oE '@@#[0-9]+@@' <<<"${open_noti}" | sed -e 's/[@#]//g')"
        noti_repo="$(grep -oE '@[a-z0-9_.-]+.[a-z0-9_.-]+$' <<<"${open_noti}" | sed -e 's/@//g')"

        pr_info=$(tea pr ls --state all --repo "${noti_repo}" | grep -E "^\| +${noti_pr_id} .* open ")
        if grep -qE " open +\| +${myuser} +\|" <<<"${pr_info}"; then
            let open_count+=1
        fi
    done
fi

i3status_state="Idle"

if [ $merge_count -gt 0 ]; then
    i3status_state="Critical"
    fcount=${merge_count}
elif [ $open_count -gt 0 ]; then
    i3status_state="Warning"
    fcount=${open_count}
elif [ $open_notis_count -gt 0 ]; then
    i3status_state="Info"
    fcount=${open_notis_count}
fi

if $markmineread ; then
    echo "GT"
else
    echo "{\"state\":\"${i3status_state}\", \"text\":\"${fcount}\"}"
fi