#!/usr/bin/env bash
mkdir -p ~/opt/mingw

_mw_enabled=0
_mw_host32=i686-w64-mingw32.static
_mw_host64=x86_64-w64-mingw32.static

if [[ "$(uname -m)" == armv7l ]]; then
    _mw_hostarm=./
else
    _mw_hostarm=armv7l-unknown-linux-gnueabihf
fi

_mw_host=$_mw_host64

typeset -Ag _mw_ # cryptic math expression errors if not global!

_mw_export() {
    [ -z "$1" ] && return 1
    [ -n "${ZSH_VERSION:-}" ] && _mw_[$1]="${(P)1}" || _mw_[$1]="${!1}"
    export "$1=$2"
}

mw-disable() {
    [ $_mw_enabled -eq 0 ] && return 1
    _mw_enabled=0

    local e=
    for e in PATH PREFIX CC CPP CXX LD CFLAGS CPPFLAGS CXXFLAGS LDFLAGS \
      AR RANLIB RC WINDRES OBJCOPY SDL_CFLAGS SDL_LDLIBS; do
        local v="${_mw_[$e]}"
        [ -n "$v" ] && export "$e=$v" || unset "$e"
    done
    echo "mw disabled"
}

mw-enable() {
    [ $_mw_enabled -eq 1 ] && mw-disable || true
    _mw_enabled=1

    _mw_host=${1:-$_mw_host}
    _mw_usr=${2:-/usr}

    local _mw_misc=$_mw_usr/$_mw_host
    local _mw_bin=$_mw_usr/bin

    local _mw_prefix=~/opt/$_mw_host
    mkdir -p "$_mw_prefix"

    local tmp="$_mw_bin/$_mw_host"
    [ -d "$tmp" ] || tmp+='-'

    set -- CC gcc CXX g++ CPP cpp LD ld AR ar \
      RANLIB ranlib RC windres WINDRES windres OBJCOPY objcopy
    while _mw_export "$1" "$tmp$2"; do
        shift 2
    done

    _mw_export PATH "$PATH:$_mw_bin"
    _mw_export PREFIX "$_mw_prefix"
    _mw_export CFLAGS "-O2 -I $_mw_misc/include -I $_mw_prefix/include"
    _mw_export LDFLAGS "-L $_mw_misc/lib -L $_mw_prefix/lib"
    _mw_export CPPFLAGS ''
    _mw_export CXXFLAGS "$CFLAGS"

    # TODO: hackish
    local sdl2c=$_mw_host-sdl2-config
    which $sdl2c >/dev/null && {
        _mw_export SDL_CFLAGS "$($_mw_host-sdl2-config --cflags)"
        _mw_export SDL_LDLIBS "$($_mw_host-sdl2-config --libs)"
    }

    echo "mw enabled ($_mw_host)"
    return 0
}

mw() {
    if [ "$#" -eq 1 ]; then
        if [[ "$1" == 32 ]]; then
            mw-enable $_mw_host32 /media/2tb/you/dump/mxe/usr
            export CFLAGS="-mwin32 $CFLAGS"
            export CXXFLAGS="$CFLAGS"
        elif [[ "$1" == 64 ]]; then
            mw-enable $_mw_host64 /media/2tb/you/dump/mxe/usr
            export CFLAGS="-mwin32 $CFLAGS"
            export CXXFLAGS="$CFLAGS"
        elif [[ "$1" == arm ]]; then
            mw-enable $_mw_hostarm /usr
            export CFLAGS="-mfloat-abi=hard -mcpu=cortex-a9 $CFLAGS"
            export CXXFLAGS="$CFLAGS"
        elif [[ "$1" == 0 ]]; then
            mw-disable
        else
            echo "usage: mw [0/32/64/arm]"
            return 1
        fi
    else
        if [ $_mw_enabled -eq 0 ]; then
            mw-enable
        else
            mw-disable
        fi
    fi
}
mw $1