#
# 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
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 = marlin.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:
		platform_name = PackageSpec(platform_packages[0]).name

	if platform_name in [ "usb-host-msc", "usb-host-msc-cdc-msc", "usb-host-msc-cdc-msc-2", "usb-host-msc-cdc-msc-3", "tool-stm32duino", "biqu-bx-workaround", "main" ]:
		platform_name = "framework-arduinoststm32"

	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"

	# 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()

	marlin.copytree(source_dir, variant_dir)