#!/usr/bin/env python
"""Parser for parsing epicsEnvSet commands
These take these forms
1) epicsEnvSet("IOC","sioc-li20-pm20")
2) epicsEnvSet IOC_SUFF "PM20"
3) epicsEnvSet ID 695

"""

import re
import sys

# Form regex patterns for the four possible forms
epicsEnvSetPatterns = []
patternComponentLists = [
    ['epicsEnvSet', r'\(', '"([^"]+)"', ',', '"([^"]+)"', r'\)'],  # epicsEnvSet("IOC","sioc-li20-pm20")
    ['epicsEnvSet', r'\(', r'(\S+)', ',', '"([^"]+)"', r'\)'],     # epicsEnvSet(IOC,"sioc-li20-pm20")
    ['epicsEnvSet ', r'(\S+) ', '"([^"]+)"'],                      # epicsEnvSet IOC_SUFF "PM20"
    ['epicsEnvSet ', r'(\S+) ', r'(\S+)'],                         # epicsEnvSet ID 695
]
for patternComponents in patternComponentLists:
    # Allow spaces between components and comments at the end
    pattern = r'^\s*{}\s*(?:#.*)?$'.format(r'\s*'.join(patternComponents))
    epicsEnvSetPatterns.append(re.compile(pattern))

def multiRegexMatch(regexPatterns, text):
    '''Matches text against multiple regex patterns'''
    for pattern in regexPatterns:
        result = pattern.match(text)
        if result:
            return result

    return None

def parseSingleEnvPathsLine(line):
    '''Parses a single envPaths line and return the name/value TUPLE'''
    result = multiRegexMatch(epicsEnvSetPatterns, line)
    if result:
        return (result.group(1), result.group(2))

    return (None, None)

# if __name__ == "__main__":
#     parseAndReplaceEnvPathsFile(sys.argv[1], {'TOP': 'ABC123'})
