'''
Created on Nov 8, 2011

@author: rcd
'''
import os               # for reading folder contents
import re               # regular expression patterns
import rsgModel         # student module: for generating sentences
import FileUtilities    # useful utilities for working with files

# Useful constants
NUM_TO_GENERATE = 10
GRAMMAR_EXT = ".g"
ROOT_DIR = "../data/"
ROOT_WEB = "http://www.cs.duke.edu/csed/rsg/uploads/"


def get_file_list (location):
    '''
    Generate list of grammar files in location.
    '''
    if location.startswith('http'):
        pattern = re.compile(r'href="(.+\.g)"')
        return pattern.findall(FileUtilities.get_as_string(FileUtilities.get_file(location)))
    else:
        return [f for f in os.listdir(location) if f.endswith(GRAMMAR_EXT)]


def choose_grammar(location):
    '''
    Choose grammar from list generated from location, return None to signal done
    '''
    names = get_file_list(location)
    for n,f in enumerate(names):
        print "%d\t%s" % (n+1,f)
    choice = int(raw_input("Choose a grammar to generate (0 to exit)> ")) - 1
    if 0 <= choice < len(names):
        print "opening", names[choice]
        return rsgModel.initialize(location+names[choice])
    else:
        return None


def generate_sentences(location, numSentences):
    '''
    Using chosen grammar from the given location, generate random texts until user quits.
    '''
    grammar = choose_grammar(location)
    while grammar:
        for x in range(numSentences):
            rsgModel.pretty_print(rsgModel.generate(grammar, "<start>"))
            print
        grammar = choose_grammar(location)


generate_sentences(ROOT_DIR, NUM_TO_GENERATE)
