#!/usr/bin/env bash

#
# Configuration script to build the 2D_Engine for different platforms.
#
# Creates makefile configuration to build for target host.
#

#
# Project settings no matter current and target hosts
#

CONFIG_FILE="config.mk"

#LUA_VERSION="5.5.1"
#LUA_CHECKSUM="1c4b4068d67061f2a2231ad2b5422e77acea1487ea9890f6320af614f4373dce"

#
# Main
#

print_error()
{
    echo -e "\033[31merror\033[m: $1"
    exit 0
}

## Parse args
TARGET_HOST="guess"

for i in "$@"; do
    case $i in
      --target-host=*)
        TARGET_HOST="${i#*=}"
        shift # past argument=value
        ;;
      --clean)
        CLEAN=1
        EXIT_AFTER_CLEAN=1
        shift # past argument=value
        ;;
      --reconfigure)
        CLEAN=1
        shift # past argument=value
        ;;
      -h|--help)
        echo "Usage : ./configure [OPTION]..."
        echo "Add submodules depending on target host platform and"
        echo "create makefile configuration to build for target host"
        echo
        echo -e "\033[1m  --target-host=\033[mHOST"
        echo -e "\tselect target host platform, default is \"guess\" and"
        echo -e "\twill try to configure for your current OS"
        echo -e "\033[1m  --clean\033[m"
        echo -e "\tclean build, config, cache, etc, and exit"
        echo -e "\033[1m  --reconfigure\033[m"
        echo -e "\tcall clean, and configure"
        echo -e "\033[1m  -h, --help\033[m"
        echo -e "\tshow help and exit"
        exit 0
        ;;
      -*)
        print_error "Unknown option $i"
        ;;
      *)
        ;;
    esac
done

## Clean
if [ -n "${CLEAN}" ]; then
    make clean
    rm -rf ${CONFIG_FILE}
fi

if [ -n "${EXIT_AFTER_CLEAN}" ]; then
    exit 0
fi

## Deduce current and target hosts
case "${OSTYPE}" in
  linux*)
    CURRENT_HOST="linux"
    ;;
#  msys*|cygwin*)
#    CURRENT_HOST="windows"
#    ;;
#  darwin*)
#    CURRENT_HOST="macos"
#    ;;
  *)
    print_error "Current detected os is unsuppoted to build from: ${OSTYPE}\nUse --help for more informations."
    ;;
esac

echo "Detected current host: ${CURRENT_HOST}"

if [ "${TARGET_HOST}" = "guess" ]; then
    TARGET_HOST=${CURRENT_HOST}
fi

case "${TARGET_HOST}" in
  linux|fxcg50)
    echo "Configuring for target: ${TARGET_HOST}"
    ;;
  *)
    print_error "Unsupported target host: ${TARGET_HOST}"
    ;;
esac

echo

if [ "${CURRENT_HOST}" != "${TARGET_HOST}" ]; then
    CROSS_COMPILE=TRUE
fi

if [ -n "${CROSS_COMPILE}" ]; then
    case "${TARGET_HOST}" in
      fxcg50)
        case "${CURRENT_HOST}" in
          linux)
            ;;
          *)
            print_error "Cross compiling from ${CURRENT_HOST} for ${TARGET_HOST} is not supported yet."
            ;;
        esac

        CC="sh-elf-gcc"
        AR="sh-elf-ar"
        LIBCORE="libcore.a"
        ;;
    esac
else
    case "${TARGET_HOST}" in
      linux)
        CC="gcc"
        AR="ar"
        CFLAGS="--std=c17 -Os -DASSET_FILE_NAME=\\\"\$(notdir \$(ASSET_OUTPUT))\\\" -D_GNU_SOURCE=1 \$(shell pkg-config --cflags sdl3)"
        LDFLAGS="\$(shell pkg-config --libs sdl3) -lm"

        LIBCORE="libcore.a"
        ;;
      *)
        ;;
    esac
fi

echo "Writing config file."
echo
echo "${CONFIG_FILE}:"
echo "\`\`\`"
echo "HOST = ${TARGET_HOST}" | tee ${CONFIG_FILE}
echo | tee -a ${CONFIG_FILE}
echo "CC = ${CC}" | tee -a ${CONFIG_FILE}
echo "AR = ${AR}" | tee -a ${CONFIG_FILE}
echo "CFLAGS = ${CFLAGS}" | tee -a ${CONFIG_FILE}
echo "LDFLAGS = ${LDFLAGS}" | tee -a ${CONFIG_FILE}
echo | tee -a ${CONFIG_FILE}
echo "LIBCORE = ${LIBCORE}" | tee -a ${CONFIG_FILE}
echo "\`\`\`"

#
### Download libs
#echo "===== downloading lua ====="
#
#LUA_TAR_GZ="${CACHE_DIR}/lua-${LUA_VERSION}.tar.gz"
#if [ ! -e "${LUA_TAR_GZ}" ]; then
#    echo "Downloading lua source..."
#    if ! curl --output "${LUA_TAR_GZ}" "https://www.lua.org/ftp/lua-${LUA_VERSION}.tar.gz"; then
#        print_error "Failed to download lua source."
#    fi
#fi
#
#echo "Checking lua source sum..."
#if ! echo "${LUA_CHECKSUM} ${LUA_TAR_GZ}" | sha256sum -c; then
#    CHECKSUM="$(sha256sum "${LUA_TAR_GZ}" | cut -d " " -f 1)"
#    rm "${LUA_TAR_GZ}"
#    print_error "Lua zip checksum not valid.\nExpected: \"${LUA_CHECKSUM}\"\nGot: \"${CHECKSUM}\"\nPlease rerun command to retry downloading."
#fi
#
#echo "Extracting lua source"
#if ! tar -xzf "${LUA_TAR_GZ}" --directory "${LIB_DIR}"; then
#    print_error "Failed to extract lua source."
#fi
#

