#!/usr/bin/env python
import argparse
import usernamegen


def main():
    description = ('Generate usernames based on a wordlist and a Markov '
                   'chain.')

    parser = argparse.ArgumentParser(description=description)
    parser.add_argument('path', type=str, metavar='WORDLIST',
                        help='Path to wordlist used for word generation')
    parser.add_argument('-p', type=int, dest='prev', default=3,
                        help='Number of previous letters to base chain on')
    parser.add_argument('-n', type=int, dest='n', default=5,
                        help='Amount of new words to generate')
    parser.add_argument('-m', type=int, dest='min', default=8,
                        help='Minimum username length')
    args = parser.parse_args()

    formatters = [
        {'format': usernamegen.Formatter.Join, 'weight': 2},
        {'format': usernamegen.Formatter.Underscore, 'weight': 2},
        {'format': usernamegen.Formatter.Capitalize, 'weight': 2},
        {'format': usernamegen.Formatter.CapitalizeExceptFirst, 'weight': 2},
        {'format': usernamegen.Formatter.AppendNumber, 'weight': 1},
        {'format': usernamegen.Formatter.CapitalizeAppendNumber, 'weight': 1}
    ]

    file = open(args.path)
    file.seek(0)
    data = file.read()
    words = data.split("\n")
    file.close()

    gen = usernamegen.Generator(words, args.prev, args.min)
    gen.setFormatters(formatters)
    for i in range(0, args.n):
        print gen.getString()

if __name__ == '__main__':
    main()
