import dbm
import sys
import re
import os

currDir = os.path.abspath(os.path.dirname(__file__))

RED='\033[1;31m'
RED_IT='\033[3;31m'
GREEN='\033[1;32m'
YELLOW='\033[1;33m'
YELLOW_IT='\033[3;33m'
NC='\033[0m'

if len(sys.argv) != 2:
    print RED + '\nInvalid arguments!!!\n'
    exit()

fileName = sys.argv[1].strip()

filePath = currDir + '/config/' + fileName

if not os.path.isfile(filePath):
    print RED + '\nFile  NOT exist!!!\n'

fileStream = open(filePath, 'r')
Lines = fileStream.readlines()

my_dict={}
i=0
errC=0

for line in Lines:
    i=i+1
    domainConf = line.strip().split(';')

    if len(domainConf) < 2:
        print RED + 'Few arguments line: ' + str(i) + NC
        errC=errC+1
        continue

    domain = domainConf[0].strip()
    cleanDomain = re.sub(r"[^a-zA-Z0-9.-]","", domain)

    prodType = domainConf[1].strip()
    cleanProdType = re.sub(r"(?!\landing\b|\bstoryTelling\b|\bsource\b)\b[^\s]+\b","", prodType)

    if domain != cleanDomain or prodType != cleanProdType:
        print RED + 'Invalid arguments line: ' + str(i) + ' ' + RED_IT + '"<' + domain + '>"' + NC
        errC=errC+1
        continue

    if cleanDomain in my_dict:
        print RED + 'Duplicate entry line: ' + str(i) + ' ' + RED_IT + '"<' + domain + '>"' + NC
        errC=errC+1
        continue

    if errC == 0:
        my_dict[cleanDomain] = cleanProdType

if errC > 0:
    print RED + '\nExit, found ' + str(errC) + ' errors\n' + NC
    exit()

db=dbm.open(currDir + "/config/apache/dist/" + fileName + ".map","c")

klist = list(db.keys())

if len(db) > 0:
    for key in klist:
        del db[key]

if len(my_dict) > 0:
    c=True
    fRedirect = open(currDir + "/config/apache/dist/" + fileName + "-domains.conf",'w')
    fTxt = open(currDir + "/config/apache/dist/" + fileName + ".txt",'w')
    for key in my_dict:
        pref="ServerAlias"
        if c == True:
            pref="ServerName"
        if my_dict[key] != 'source':
            fRedirect.write(pref + ' ' + key + os.linesep)
            fTxt.write(key + ' ' + my_dict[key] + os.linesep)
        db[key] = my_dict[key]
        c=False
    fTxt.close()
    fRedirect.close()
db.close()