import os
import sys
from os.path import join, isfile

Import("env")

# 1. Находим, где на этом ПК физически лежит фреймворк ESP-IDF
FRAMEWORK_DIR = env.PioPlatform().get_package_dir("framework-espidf")
if not FRAMEWORK_DIR:
    print("[ERROR] Не удалось найти директорию framework-espidf!")
    sys.exit(1)

def patch_file(file_path, search_str, replace_str):
    if not isfile(file_path):
        return
    with open(file_path, "r", encoding="utf-8") as f:
        content = f.read()
    if search_str in content and replace_str not in content:
        print(f"[PATCHING] Модификация файла: {file_path}")
        new_content = content.replace(search_str, search_str + replace_str)
        with open(file_path, "w", encoding="utf-8") as f:
            f.write(new_content)

# 2. Патчим Kconfig, чтобы добавить новые кнопки в menuconfig / sdkconfig
kconfig_path = join(FRAMEWORK_DIR, "components", "esp_system", "port", "soc", "esp32s3", "Kconfig.cpu")
search_kconfig = 'config ESP_DEFAULT_CPU_FREQ_MHZ_240\n        bool "240 MHz"'
replace_kconfig = """\n    config ESP_DEFAULT_CPU_FREQ_MHZ_320
        bool "320 MHz"
    config ESP_DEFAULT_CPU_FREQ_MHZ_480
        bool "480 MHz" """

search_kconfig_val = 'default 240 if ESP_DEFAULT_CPU_FREQ_MHZ_240'
replace_kconfig_val = """\n    default 320 if ESP_DEFAULT_CPU_FREQ_MHZ_320\n    default 480 if ESP_DEFAULT_CPU_FREQ_MHZ_480"""

patch_file(kconfig_path, search_kconfig, replace_kconfig)
patch_file(kconfig_path, search_kconfig_val, replace_kconfig_val)

# 3. Патчим rtc_clk.c, чтобы ядро умело конфигурировать тактовые делители
rtc_clk_path = join(FRAMEWORK_DIR, "components", "esp_hw_support", "port", "esp32s3", "rtc_clk.c")
search_rtc = "case 240:\n        config.source = SOC_CPU_CLK_SRC_PLL;\n        config.source_freq_mhz = 480;\n        config.div = 2;\n        break;"
replace_rtc = """\n    case 320:
        config.source = SOC_CPU_CLK_SRC_PLL;
        config.source_freq_mhz = 320;
        config.div = 1;
        break;
    case 480:
        config.source = SOC_CPU_CLK_SRC_PLL;
        config.source_freq_mhz = 480;
        config.div = 1;
        break;"""

patch_file(rtc_clk_path, search_rtc, replace_rtc)
