package stablemarriage;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.Reader;

import lib.Maybe;

import com.google.gson.Gson;

public class Main {
	
	private static void usage() {
		System.out.println("Usage: java StableMarriage -r n");
		System.out.println("creates random preference of size n");
		System.out.println("Usage: java StableMarriage -f preferenceFile");
		System.out.println("reads preference from f");
	}
	
	/**
	 * Creates and solves a random stable marriage problem of
	 * size n, where n is given on the command line.
	 * or solves a stable marriage problem where preferences are read
	 * from a file
	 * @throws FileNotFoundException 
	 */
	public static void main(String[] args) throws FileNotFoundException {
		if (args.length != 2) {
			usage();
		}else if(args[0].equals("-r")){
			int n = Integer.parseInt(args[1]);
			mainRandom(n);
		}else if(args[0].equals("-f")){
			mainFile(args[1]);
		}else{
			usage();
		}
	}

	private static void mainFile(String file) throws FileNotFoundException {
		Gson gson = new Gson();
		Reader contents = new FileReader(file);
		Preference pref = gson.fromJson(contents, Preference.class);
		Maybe<String> isValidPref = pref.valid();
		if(isValidPref.isSome()){
			System.out.println(isValidPref.get());
		}else{
			StableMarriage.GaleShapley(pref);
		}
	}

	private static void mainRandom(int n) {
		Preference pref = Preference.randomPrefs(n);
		if (n <= 10)
			System.out.println(pref);
		Marriages marriages = StableMarriage.GaleShapley(pref);
		if (n <= 10)
			System.out.println(marriages);
	}
}