#include "version.h"
#include "common/strutil.h"

#if defined(__x86_64__)
    #define FF_ARCHITECTURE "x86_64"
#elif defined(__i386__)
    #define FF_ARCHITECTURE "i386"
#elif defined(__ia64__)
    #define FF_ARCHITECTURE "ia64"
#elif defined(__aarch64__)
    #define FF_ARCHITECTURE "aarch64"
#elif defined(__arm__)
    #define FF_ARCHITECTURE "arm"
#elif defined(__mips__)
    #define FF_ARCHITECTURE "mips"
#elif defined(__powerpc__) || defined(__powerpc)
    #define FF_ARCHITECTURE "powerpc"
#elif defined(__riscv__) || defined(__riscv)
    #define FF_ARCHITECTURE "riscv"
#elif defined(__s390x__)
    #define FF_ARCHITECTURE "s390x"
#elif defined(__loongarch__)
    #define FF_ARCHITECTURE "loongarch"
#elif defined(__sparc__)
    #define FF_ARCHITECTURE "sparc"
#elif defined(__alpha__)
    #define FF_ARCHITECTURE "alpha"
#elif defined(__hppa__)
    #define FF_ARCHITECTURE "hppa"
#elif defined(__sh__)
    #define FF_ARCHITECTURE "sh"
#elif defined(__m68k__)
    #define FF_ARCHITECTURE "m68k"
#else
    #define FF_ARCHITECTURE "Unknown"
#endif

#if defined(__ANDROID__)
    #define FF_SYSNAME "Android"
#elif defined(__linux__)
    #define FF_SYSNAME "Linux"
#elif defined(__DragonFly__) // We define `__FreeBSD__` on DragonFly BSD for simplification
    #define FF_SYSNAME "DragonFly"
#elif defined(__MidnightBSD__)
    #define FF_SYSNAME "MidnightBSD"
#elif defined(__FreeBSD__)
    #define FF_SYSNAME "FreeBSD"
#elif defined(__APPLE__)
    #define FF_SYSNAME "macOS"
#elif defined(_WIN32)
    #define FF_SYSNAME "Windows"
#elif defined(__sun)
    #define FF_SYSNAME "SunOS"
#elif defined(__OpenBSD__)
    #define FF_SYSNAME "OpenBSD"
#elif defined(__NetBSD__)
    #define FF_SYSNAME "NetBSD"
#elif defined(__HAIKU__)
    #define FF_SYSNAME "Haiku"
#elif defined(__GNU__)
    #define FF_SYSNAME "GNU"
#else
    #define FF_SYSNAME "Unknown"
#endif

FFVersionResult ffVersionResult = {
    .projectName = FASTFETCH_PROJECT_NAME,
    .sysName = FF_SYSNAME,
    .architecture = FF_ARCHITECTURE,
    .version = FASTFETCH_PROJECT_VERSION,
    .versionTweak = FASTFETCH_PROJECT_VERSION_TWEAK,
    .versionGit = FASTFETCH_PROJECT_VERSION_GIT,
    .cmakeBuiltType = FASTFETCH_PROJECT_CMAKE_BUILD_TYPE,
    .compileTime = __DATE__ ", " __TIME__,
    .compiler =

#ifdef __clang__
    #ifdef _MSC_VER
        "clang-cl ";
    #elif defined(__APPLE__) && defined(__apple_build_version__)
        "Apple clang "
    #else
        "clang "
    #endif

FF_STR(__clang_major__)
"." FF_STR(__clang_minor__) "." FF_STR(__clang_patchlevel__)

    #if defined(__APPLE__) && defined(__apple_build_version__)
    " (" FF_STR(__apple_build_version__) ")"
    #endif
    ,
#elif defined(__GNUC__)
        "gcc " FF_STR(__GNUC__) "." FF_STR(__GNUC_MINOR__) "." FF_STR(__GNUC_PATCHLEVEL__),
#elif defined(_MSC_VER)
        "msvc " FF_STR(_MSC_VER),
#else
        "unknown",
#endif

    .debugMode =
#ifndef NDEBUG
        true,
#else
        false,
#endif
}
;
