import re

pattern = None
patterns = []
patternsIndex = {}
key = None

def appendToList(key, pattern):
    printFlag = False
    if (key in patternsIndex.keys()):
        for i in range(len(pattern)):
            if (isinstance(pattern[i],list)):
                if (patterns[patternsIndex[key]][i]=='#'):
                    patterns[patternsIndex[key]][i] = pattern[i]
                else:
                    for v in pattern[i]:
                        patterns[patternsIndex[key]][i].append(v)
                    patterns[patternsIndex[key]][i] = list(set(patterns[patternsIndex[key]][i]))
    else:
        patterns.append(pattern)
        patternsIndex[key] = len(patterns) - 1

with open("patterns.log") as f:
    for line in f:
        p = re.search("pattern: (.+)",line)
        if(p):
            appendToList(key, pattern)
            key = p.group(1)
            pattern = p.group(1).split()
        else:
            v = re.search("(\d+): (.+)",line)
            if(v):
                pattern[int(v.group(1))] = v.group(2).split()

patterns.append(pattern)    #Inserting the last pattern
patterns.pop(0)             #Removing the None value
patternsIndex.pop(None)

sortedPatterns=(sorted(patternsIndex.keys()))

with open("patterns.html", 'w') as f:

    f.write("""
<html>
    <head>
            <title>Event patterns</title>
            <style>
                    body{
                        font-family: "open sans";
                    }
                    #variable{
                            color: darkblue;
                            border: none;
                            background-color: lightblue;
                    }
                    #digit{
                            color: green;
                            border: none;
                            background-color: lightgreen;
                    }
                    select::-ms-expand {
                            display: none;
                    }
                    select{
                            -webkit-appearance: none;
                            -moz-appearance: none;
                            text-indent: 1px;
                            text-overflow: '';			
                    }
                    .pattern{
                            margin-top: 10px;
                    }
                    .counter{
                            width:70px;
                            float:left;
                            background-color: rgb(250,250,250);
                    }
                    .pattern:hover {
                            background-color: lightgray;
                    }
                    span{
                            color:green;
                    }
            </style>
    </head>
    <body>\n""")

    i = 0

    for j in sortedPatterns:
        p = patterns[patternsIndex[j]-1]
        i += 1
        f.write("      <div class='pattern'>\n")
        f.write("         <div class='counter'>[{}]</div>\n".format(i))
        for val in p:
            if isinstance(val,list):
                f.write('\n         <select id="variable">\n')
                f.write('                <option></option>\n')
                for v in val:
                    f.write("                <option>{}</option>\n".format(v))
                f.write('         </select> ')
            elif(val=="#"):
                f.write('\n         <span>000</span>\n')
            else:
                f.write("{} ".format(val))
        f.write("\n      </div>\n")
    f.write("""
    </body>
</html>""")
