import json
import sys

# Example: python3 optionAdder.py --add test '-p MEGATEST' 'A cool option' /home/sebastian/b-language-extension/
def modify_server(varName: str, comand: str, filename):
    var_marker: str = '//PYTHONVAR'
    if_marker: str = '//PYTHONIF'
    setting_marker: str = '//PYTHONSETTING'
    default_marker: str = '//PYTHONDEFAULT'
    python_command: str = '/*PYTHONCMD*/'

    with open(filename) as file:
        # Get only numbers
        file_handler = file.readlines()
    new_file = []
    for line in file_handler:
        if setting_marker in line:
            new_file.append('\t' + varName + ':boolean\n')
        if default_marker in line:
            new_file.append('\t' + varName + ':false,\n')
        if var_marker in line:
            new_file.append('\tlet ' + varName + '=""\n\t')
        if if_marker in line:
            new_file.append('\n\tif(settings.' + varName + ' == true){ \n\t\t' +
                            varName + '=' + ' "' + comand + '" ' + '\n' +
                            '\t}\n')
        if python_command in line:
            new_file.append('\t\t\t\t\t\t\t+ ' + varName + '\n')
        new_file.append(line)

    with open(filename, 'w') as f:
        f.writelines(new_file)


def modify_package(varName: str, description: str, filename:str):
    with open(filename) as file:
        attribute_dict = {
            'scope': 'window',
            'type': 'boolean',
            'default': 'false',
            'description': description}

        file_handler = json.load(file)
        file_handler['contributes']['configuration']['properties']['languageServer.' + varName] = attribute_dict

        json.dumps(file_handler)

    with open(filename, 'w') as f:
        json.dump(file_handler, f, indent=4)


def main():
    if len(sys.argv) >= 2:
        if sys.argv[1] == '--help':
            print('Helper to add boolean options quickly')
            print('Usage:')
            print('python --add optionName optionCommand optionDescription dirOfPackage.json')
        elif sys.argv[1] == '--add' and len(sys.argv) == 6:
            print(sys.argv)
            optionName = sys.argv[2]
            optionCommand = sys.argv[3]
            optionDescription = sys.argv[4]
            homeDir = sys.argv[5]

            modify_server(optionName, optionCommand, homeDir + '/server/src/server.ts')
            modify_package(optionName, optionDescription, homeDir + '/package.json')
        else:
            print("Something went wrong")


if __name__ == "__main__":
    main()