#!python

import argparse

from puzzlepy.sudoku import Sudoku
from puzzlepy.sudoku import SudokuSolver
from puzzlepy.sudoku import SudokuGenerator
from puzzlepy.sudoku import SudokuCollection

levels = ['mild', 'difficult', 'fiendish', 'super-fiendish']


def solve(fin):

    sudokus = SudokuCollection.load_json(fin)
    sudokus.solve()


def generate(outfile, numbers):

    sudokus = SudokuCollection()

    for index, level in enumerate(levels):
        number = numbers[index]
        outlevel = level.replace('-', '')
        sudokus.set_sudokus(SudokuGenerator.generate(level, number), outlevel)

    sudokus.save_json(outfile)

def test(fin):

    sudokus = SudokuCollection.load_json(fin)
    sudokus.test()


if __name__ == "__main__":

    # Parse arguments.
    parser = argparse.ArgumentParser()

    action = parser.add_mutually_exclusive_group(required=True)
    action.add_argument('-s', '--solve', type=argparse.FileType('r'))
    action.add_argument('-g', '--generate', type=argparse.FileType('w'))
    action.add_argument('-t', '--test', type=argparse.FileType('r'))

    # Generate options
    parser.add_argument('-n', '--numbers', type=int, nargs=4)

    args = parser.parse_args()

    if(args.solve):
        solve(args.solve)
    elif(args.generate):
        generate(args.generate, args.numbers)
    elif(args.test):
        test(args.test)
