#!/usr/bin/env bash

# build script for mkvnote-gui
# Usage: ./build [clean]

SCRIPT_NAME="$(basename "${0}")"
SCRIPT_DIR="$(cd "$(dirname "${0}")" && pwd)"
BUILD_DIR="${SCRIPT_DIR}/_build"

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RESET='\033[0m'

_log(){ echo -e "${1}${2}${RESET}" ; }
_ohno(){ _log "${RED}" "${1}" ; exit 1 ; }

# check for cmake and Qt6
if ! command -v cmake &>/dev/null ; then
    _ohno "cmake not found. Install with: brew install cmake"
fi
QT6_PREFIX="$(brew --prefix qt@6 2>/dev/null)"
if [[ -z "${QT6_PREFIX}" || ! -d "${QT6_PREFIX}" ]] ; then
    _ohno "Qt6 not found. Install with: brew install qt@6"
fi

# clean up process
if [[ "${1}" == "clean" ]] ; then
    _log "${YELLOW}" "Cleanup time! ..."
    rm -rf "${BUILD_DIR}"
    _log "${GREEN}" "Done cleaning up around here."
    exit 0
fi

# build process
_log "${GREEN}" "Getting ready :) ..."
if [[ ! -d "${BUILD_DIR}" ]] ; then
    mkdir -p "${BUILD_DIR}"
fi

# clear cache if it exists and is stale
if [[ -f "${BUILD_DIR}/CMakeCache.txt" ]] ; then
    _log "${YELLOW}" "Clearing stale CMake cache..."
    rm -f "${BUILD_DIR}/CMakeCache.txt"
    rm -rf "${BUILD_DIR}/CMakeFiles"
fi
cmake -S "${SCRIPT_DIR}" -B "${BUILD_DIR}" -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="${QT6_PREFIX}" -DCMAKE_OSX_ARCHITECTURES=arm64 || _ohno "cmake configure failed"

_log "${GREEN}" "Building it..."
cmake --build "${BUILD_DIR}" --parallel "$(sysctl -n hw.logicalcpu)" || _ohno "cmake build failed"

#
BINARY="${BUILD_DIR}/mkvnote-gui"
if [[ -f "${BINARY}" ]] ; then
    _log "${GREEN}" "Built it: ${BINARY}"
    _log "${GREEN}" "Run like: ${BINARY} /path/to/file.mkv"
else
    _ohno "Build finished but it's not at ${BINARY}. Hmmm."
fi
