#!/usr/bin/env python
from glob import glob
from pathlib import Path
from SCons.Script import *

# Initialize environment and SCons script for godot-cpp
env = SConscript("godot-cpp/SConstruct")
env.Tool('msvs')

# Sources and include paths
env.Append(CPPPATH=["src/"])
sources = Glob("src/*.cpp")
sources += Glob("src/platform/win32/*.cpp")

includes = Glob("src/*.h")
includes += Glob("src/platform/win32/*.h")

# Append additional library paths and libraries for Opus, Speex, and vpx
env.Append(CPPPATH=['#3rdparty/opus/include', '#3rdparty/speex/include', '#3rdparty/libvpx/include'])
env.Append(LIBPATH=['#3rdparty/opus/lib', '#3rdparty/speex/lib', '#3rdparty/libvpx/lib/x64'])
env.Append(LIBS=['opus', 'libspeex', 'libspeexdsp', 'vpx'])

# Determine extension and addon path
(extension_path,) = glob("export/addons/*/*.gdextension")
addon_path = Path(extension_path).parent
project_name = Path(extension_path).stem
debug_or_release = "release" if env["target"] == "template_release" else "debug"

# Generate library based on platform
if env["platform"] == "macos":
    library = env.SharedLibrary(
        "{0}/lib/lib{1}.{2}.{3}.framework/{1}.{2}.{3}".format(
            addon_path,
            project_name,
            env["platform"],
            debug_or_release,
        ),
        source=sources,
    )
else:
    library = env.SharedLibrary(
        "{}/lib/lib{}.{}.{}.{}{}".format(
            addon_path,
            project_name,
            env["platform"],
            debug_or_release,
            env["arch"],
            env["SHLIBSUFFIX"],
        ),
        source=sources,
    )

srcs = []
for s in sources:
    srcs.append(s.abspath)

incs = []
for s in includes:
    incs.append(s.abspath)

msvs_project = env.MSVSProject(
    target = project_name + env['MSVSPROJECTSUFFIX'],
    srcs = srcs,
    incs = incs,
    include_dirs = env['CPPPATH'],
    lib_dirs = env['LIBPATH'],
    libs = env['LIBS'],
    variant = 'Debug|x64',
)

# Make sure the default build includes the Visual Studio project
Default(library, msvs_project)