"""
Template scripts for generating workspace files:
    - c_cpp_properties.json
    - tasks.json
    - makefile strings/functions
    - buildData.json
"""
import os

launchName_Debug = "Cortex debug"
launchName_Python = "Debug current Python file"

taskName_build = "Build project"
taskName_compile = "Compile current file"
taskName_clean = "Delete build folder"

taskName_CPU_buildDownloadRun = "CPU: Build, Download and run"
taskName_CPU_downloadRun = "CPU: Download and run"
taskName_CPU_resetRun = "CPU: Reset and run"
taskName_CPU_halt = "CPU: Halt"
taskName_CPU_run = "CPU: Run"

taskName_Python = "Run Python file"
taskName_OpenCubeMX = "Open CubeMX project"
taskName_updateWorkspace = "Update workspace"

#########################################################################################################
c_cpp_template = """{
    "env" : {
        "____________________USER_FIELDS_CAN_BE_MODIFIED____________________": "",
        "user_cSources": [],
        "user_asmSources": [],
        "user_ldSources": [],
        "user_cIncludes": [],
        "user_asmIncludes": [],
        "user_ldIncludes": [],
        "user_cDefines": [],
        "user_asmDefines": [],
        "user_cFlags": [],
        "user_asmFlags": [],
        "user_ldFlags": [],

        "____________________DO_NOT_MODIFY_FIELDS_BELOW____________________": "",
        "cubemx_sourceFiles": [],
        "cubemx_includes": [],
        "cubemx_defines": [],
        "gccExePath": "",
        "gccIncludePath": ""
    },
    "configurations": [
        {
            "name": "devTestBoard name of the project?",
            "intelliSenseMode": "msvc-x64",
            "includePath": [
                "${workspaceFolder}",
                "${cubemx_includes}",
                "${gccIncludePath}",
                "${user_cIncludes}",
                "${user_asmIncludes}",
                "${user_ldIncludes}"
            ],
            "browse": {
                "path": [
                    "${workspaceFolder}",
                    "${cubemx_includes}",
                    "${gccIncludePath}",
                    "${user_cIncludes}",
                    "${user_asmIncludes}",
                    "${user_ldIncludes}"
                ],
                "limitSymbolsToIncludedHeaders": true
            },
            "defines": [
                "${cubemx_defines}",
                "${user_cDefines}",
                "${user_asmDefines}"
            ],
            "forcedInclude": [
            ],
            "compilerPath": "${gccExePath}",
            "cStandard": "c11",
            "cppStandard": "c++17"
        }
    ],
    "version": 4
}
"""
#########################################################################################################
versionString = "Version ***"
lastRunString = "Last run: ***"

#########################################################################################################
makefileHeader = ('#' * 100) + "\n"
makefileHeader += "# Makefile generated by updateMakefile.py\n"
makefileHeader += "# " + versionString + " \n"
makefileHeader += "# " + lastRunString + " \n"
makefileHeader += ('#' * 100) + "\n"

#########################################################################################################
printMakefileVariableFunction = "print-%:"
printMakefileDefaultString = "VARIABLE="
printMakefileVariable = "#######################################\n"
printMakefileVariable += "# Print makefile variables\n"
printMakefileVariable += "#######################################\n"
printMakefileVariable += printMakefileVariableFunction + "\n"
printMakefileVariable += "\t@echo " + printMakefileDefaultString + "$($*)\n"

#########################################################################################################
cleanFunctionNameSearchString = "clean:"
cleanBuildDirFunctionName = "clean-build-dir"
cleanBuildDirFunction = "#######################################\n"
cleanBuildDirFunction += "# Clean build directory content \n"
cleanBuildDirFunction += "#######################################\n"
cleanBuildDirFunction += cleanBuildDirFunctionName + ":\n"
cleanBuildDirFunction += "\t@echo Build folder: '$(BUILD_DIR)' clean request (files with spaces and folders will not be removed):\n"
cleanBuildDirFunction += "\t@$(foreach file, $(wildcard $(BUILD_DIR)/*), rm -f $(file))\n"
cleanBuildDirFunction += "\t@echo OK.\n"

#########################################################################################################
taskTemplate = """{
            "label": "Update workspace",
            "type": "shell",
            "command": "python",
            "args": [
                "${workspaceFolder}\\\\test.py"
            ],
            "group": "none",
            "presentation": {
                "reveal": "always",
                "panel": "shared"
            },
            "problemMatcher": {
            }
        }
"""

tasksFileTemplate = """{
    "version": "2.0.0",
    "tasks": ["""
tasksFileTemplate += """
    ]
}
"""

#########################################################################################################
# buildData.json has template with all keys listed, since it is needed for sorting purposes. There
# might be a better way to handle sorting (TODO)
buildDataTemplate = """{
    "ABOUT1": "This file holds combined user and CubeMX generated Makefile workspace dependecies.",
    "ABOUT2": "User should not edit this fields, instead it should edit 'c_cpp_properties.json'",
    "ABOUT3": "This file is regenerated on 'Update workspace' task.",
    "VERSION": "",
    "LAST_RUN": "",
    "cSources": [],
    "asmSources": [],
    "ldSources": [],
    "cIncludes": [],
    "asmIncludes": [],
    "ldIncludes": [],
    "cDefines": [],
    "asmDefines": [],
    "cFlags" : [],
    "asmFlags" : [],
    "ldFlags" : [],
    "buildDir": "",
    "targetExecutablePath": "",
    "cubeMxProjectPath": "",
    "openOcdConfig": [],
    "stm32SvdPath": "",
    "ABOUT4": "---- Paths below are fetched from user-specific 'toolsPaths.json'. ----",
    "gccExePath": "",
    "gccInludePath": "",
    "buildToolsPath": "",
    "pythonExec": "",
    "openOcdPath": "",
    "openOcdInterfacePath": ""
}
"""

#########################################################################################################
toolsPathsTemplate = """{
    "ABOUT1": "This file store common tools paths, shared by all VS Code ideScripts-based projects.",
    "ABOUT2": "Delete/correct this file if paths/folder structure change on system.",
    "VERSION": "",
    "LAST_RUN": ""
}
"""

#########################################################################################################
launchFileTemplate = """{
    "version": "0.2.0",
    "configurations": [
    ]
}
"""

#########################################################################################################
cubeMxTmpFolderName = '_tmpCubeMx'
cubeMxTmpFileName = 'tmpCubeMx.txt'

#########################################################################################################
defaultVsCodeSettingsFolder_WIN = os.path.expandvars("%APPDATA%/Code/User/")
defaultVsCodeSettingsFolder_UNIX = os.path.expandvars("$HOME/.config/Code/User/")
defaultVsCodeSettingsFolder_OSX = os.path.expandvars("$HOME/Library/Application Support/Code/User/")
