#!/usr/bin/python
import sys
from time import time
from optparse import OptionParser

from sudokulib.grid import InvalidGrid
from sudokulib.solver import SudokuSolver


if __name__ == '__main__':
    parser = OptionParser(usage='usage: %prog [options] source')
    parser.add_option('--nopreprocessing', action='store_false',
                      dest='preprocessing', default=True,
                      help='Do not use preprocessing for finding solution')
    parser.add_option('-f', '--free', dest='free_char', type='string',
                      help='The character signaling free place', default='.')
    (options, args) = parser.parse_args()

    if not len(args):
        sys.exit('No source file provided')

    source = args[0]

    start_time = time()

    solver_kw = {'free_char': options.free_char, 'solvers': []}
    if not options.preprocessing:
        solver_kw['preprocessors'] = []

    try:
        solver = SudokuSolver(source, **solver_kw)
    except InvalidGrid, e:
        sys.exit(e)

    print '%s items missing' % solver.grid.missing

    solver.run()

    print solver
    print 'Solved in %s seconds' % (time() - start_time)
