import time

__all__ = ["outputHeader", "outputCaseStudy","outputCaseStudies"]


def outputHeader(stream,inputFileName):
    '''
    Prints header on output of case study registration file
    '''
    print >> stream, ";;;; case studies were converted from", inputFileName, "at", time.strftime("%Y-%m-%d %H:%M:%S %Z")

def outputConstraint (attributeName, values):
    '''
    Returns the a string of a constraint definition of a case study
    in registor format for Nova
    '''
    return "(" + attributeName + " " + " ".join(map(lambda (x):
                                                        str(x)
                                                    ,values)) + ")"

def outputCaseStudy (stream, caseStudyName, attributes) :
    '''
    Prints out the lisp code to register a case study in nova.  
    attributes is a map of attribute name to values (as list)
    '''
    listPrefix = "(register-case-study "
    padding = len(listPrefix)* " "
    print >> stream, listPrefix + caseStudyName + " \"" + caseStudyName + "\""
    print >> stream, padding +  "("
    for attributeName,values in attributes.iteritems() :
        print >> stream, padding + " " + outputConstraint(attributeName, values)
    print >> stream, padding + "))"


def outputCaseStudies(outputFileStream,caseStudies):
    '''
    Taking case studyies as a map of maps (caseStudyName -> attributes -> values), 
    it prints each caseStudy.
    '''
    for caseStudyName, attributes in caseStudies.iteritems():
        outputCaseStudy(outputFileStream, caseStudyName, attributes)