#
# generic_create_variant.py
#
# Copy one of the variants from buildroot/platformio/variants into
# the appropriate framework variants folder, so that its contents
# will be picked up by PlatformIO just like any other variant.
#
import pioutil, re
marlin_variant_pattern = re.compile("marlin_.*")
if pioutil.is_pio_build():
    import shutil, marlin
    from pathlib import Path

    #
    # Get the platform name from the 'platform_packages' option,
    # or look it up by the platform.class.name.
    #
    env = pioutil.env
    platform = env.PioPlatform()

    from platformio.package.meta import PackageSpec
    platform_packages = env.GetProjectOption('platform_packages')

    # Remove all tool items from platform_packages
    platform_packages = [x for x in platform_packages if not x.startswith("platformio/tool-")]

    if len(platform_packages) == 0:
        framewords = {
            "Ststm32Platform": "framework-arduinoststm32",
            "AtmelavrPlatform": "framework-arduino-avr"
        }
        platform_name = framewords[platform.__class__.__name__]
    else:
        spec = PackageSpec(platform_packages[0])
        if spec.uri and '@' in spec.uri:
            platform_name = re.sub(r'@.+', '', spec.uri)
        else:
            platform_name = spec.name

    FRAMEWORK_DIR = Path(platform.get_package_dir(platform_name))
    assert FRAMEWORK_DIR.is_dir()

    board = env.BoardConfig()

    #mcu_type = board.get("build.mcu")[:-2]
    variant = board.get("build.variant")
    #series = mcu_type[:7].upper() + "xx"

    # Only prepare a new variant if the PlatformIO configuration provides it (board_build.variant).
    # This check is important to avoid deleting official board config variants.
    if marlin_variant_pattern.match(str(variant).lower()):
        # Prepare a new empty folder at the destination
        variant_dir = FRAMEWORK_DIR / "variants" / variant
        if variant_dir.is_dir():
            shutil.rmtree(variant_dir)
        if not variant_dir.is_dir():
            variant_dir.mkdir()

        # Source dir is a local variant sub-folder
        source_dir = Path("buildroot/share/PlatformIO/variants", variant)
        assert source_dir.is_dir()

        print("Copying variant " + str(variant) + " to framework directory...")

        marlin.copytree(source_dir, variant_dir)