import platform
import os
import sysconfig

if os.environ.get("PYSIDEVERSION", "6") in "25":
    import PySide2 as PySide
    standard = "c++14"
    pysideversion = "2"
else:
    import PySide6 as PySide
    standard = "c++17"
    pysideversion = "6"

qtversion = ".".join(PySide.__version__.split(".")[:2])

if platform.system() == "Linux":
    if os.path.isfile("/etc/manylinux-release"):
        with open("/etc/manylinux-release", "r") as f:
            target_platform = f.read().strip()
    else:
        target_platform = "linux_" + platform.machine()
    env = Environment(target_platform=target_platform,
                      deploy_platform="linux_" + platform.machine(),
                      toolpath=["#/sconstools3"],
                      ENV = os.environ,
                      variant="unknown")
    
    if qtversion[0] == "5":
        if "QTDIR" in ARGUMENTS: 
            env["QT5DIR"] = ARGUMENTS["QTDIR"]
            os.environ["QTDIR"] = ARGUMENTS["QTDIR"]
            print("QTDIR=",ARGUMENTS["QTDIR"])
        env["QT5VERSION"] = qtversion
        env.Tool("qt5")
        env["QTDIR"] = env["QT5DIR"]
    elif qtversion[0] == "6":
        if "QTDIR" in ARGUMENTS:
            env["QT6DIR"] = ARGUMENTS["QTDIR"]
            os.environ["QTDIR"] = ARGUMENTS["QTDIR"]
            print("QTDIR=",ARGUMENTS["QTDIR"])
        env["QT6VERSION"] = qtversion
        env.Tool("qt6")
        env["QTDIR"] = env["QT6DIR"]
    else:
        raise RuntimeError("Unknown Qt Version: %s", qtversion)

    env['ENV']['PKG_CONFIG_PATH'] = env.subst("$QTDIR") + '/lib/pkgconfig'
    print("pkgconfig path:", env['ENV']['PKG_CONFIG_PATH'])
    # fix shiboken2 lib not found issues
    env.PrependENVPath('LD_LIBRARY_PATH', sysconfig.get_paths()['purelib'] + "/PySide%s/Qt/lib" % pysideversion)
    # make sure moc is working
    env.PrependENVPath('LD_LIBRARY_PATH', env.subst("$QTDIR") + "/lib")
    
else:
    # windows environment
    env = Environment(MSVC_VERSION="14.2", 
                      tools=["default"], 
                      toolpath=["#/sconstools3"],
                      target_platform="msvc_x86_64",
                      deploy_platform="msvc_x86_64",
                      variant="unknown")                     
    if qtversion[0] == "6":
        env["QT6VERSION"] = qtversion
        env.Tool("qt6")
    else:
        raise RuntimeError("Unknown Qt Version: %s", qtversion)

# TODO: disable QtWidgets and QtGui after this has been fixed:
#   https://bugreports.qt.io/browse/PYSIDE-1627
env.EnableQt6Modules(["QtCore", "QtWidgets", "QtGui"])
env.AddMethod(lambda env, args: args, "RegisterSources")
env.AddMethod(lambda env, args: None, "RegisterTargets")
env.Append(CPPDEFINES=["Py_LIMITED_API"])

if platform.system() == "Linux":
    dbg_env = env.Clone(CCFLAGS=Split("-Wall -g -std=%s -O0" % standard), #-fvisibility=hidden 
                        LINKFLAGS=Split("-g"),
                        variant="nonopt")
    rel_env = env.Clone(CCFLAGS=Split("-Wall -std=%s -O3" % standard), #-fvisibility=hidden 
                        variant="release")    
else:    
    env.Append(CPPDEFINES=["_CRT_SECURE_NO_WARNINGS"])
    dbg_env = env.Clone(CCFLAGS=Split("/nologo /EHsc /TP /W3 /Od /Ob2 /Z7 /MD /std:%s /Zc:__cplusplus /permissive-" % standard),
                        LINKFLAGS=Split("/nologo /DEBUG"),
                        variant="nonopt")
    rel_env = env.Clone(CCFLAGS=Split("/nologo /EHsc /TP /W3 /Ox /Z7 /MD /std:%s /Zc:__cplusplus /permissive-" % standard),
                        LINKFLAGS=Split("/nologo /DEBUG"),
                        variant="release")

SConscript('../nexxT/src/SConscript.py', variant_dir=dbg_env.subst("build/${target_platform}_${variant}/nexxT/src"), exports=dict(env=dbg_env), duplicate=0)
SConscript('../nexxT/src/SConscript.py', variant_dir=rel_env.subst("build/${target_platform}_${variant}/nexxT/src"), exports=dict(env=rel_env), duplicate=0)
SConscript('../nexxT/tests/src/SConscript.py', variant_dir=dbg_env.subst("build/${target_platform}_${variant}/nexxT/tests/src"), exports=dict(env=dbg_env), duplicate=0)
SConscript('../nexxT/tests/src/SConscript.py', variant_dir=rel_env.subst("build/${target_platform}_${variant}/nexxT/tests/src"), exports=dict(env=rel_env), duplicate=0)
