#include "input.h"

/**
 * Parses size count and number of lines.
 */
static int parse_s(wchar_t *param) {

	wchar_t * pos = wcschr(param, 'x');

	if (pos == NULL) {

		int n = _wtoi(param);

		if (n < 1) {
			fprintf(stderr, "an invalid argument supplied for -s\n");
			return 0;
		}

		parameters.count = n;
		parameters.lines = 1;

		return 1;

	}

	wchar_t *c_lines = pos + 1;
	wchar_t *c_count = malloc(wcslen(param) - wcslen(c_lines) - 1);

	wcsncpy_s(c_count, wcslen(param) - wcslen(c_lines), param, _TRUNCATE);

	int n;

	n = _wtoi(c_count);

	if (n < 1) {
		fprintf(stderr, "invalid length specified for -s\n");
	}

	parameters.count = n;

	n = _wtoi(c_lines);

	if (n < 1) {
		fprintf(stderr, "invalid lines number specified for -s\n");
	}

	parameters.lines = n;

	return 1;
}

/**
 * Parses input options and arguments.
 */
int ParseParameters(int argc, wchar_t * argv[]) {

	int set = 0;
	int res = 1;

	for (int i = 0; res && i < argc; i++) {

		if ((set & 1) == 0 && wcsncmp(argv[i], L"-s", 2) == 0) {

			set |= 1;

			if (wcslen(argv[i]) > 2) {
				res = parse_s(argv[i] + 2);
			} else if (i + 1 < argc) {
				res = parse_s(argv[++i]);
			} else {
				fwprintf(stderr, L"no argument specified for -s\n");
				res = 0;
			}

		} else if (wcscmp(argv[i], L"-h") == 0 || wcscmp(argv[i], L"--help") == 0) {
			res = 0;
		} else if ((set & 2) == 0) {
			set |= 2;
			res = ParseList(argv[i]);
		} else {
			fwprintf(stderr, L"unknown argument %s\n", argv[i]);
			res = 0;
		}

	}

	return res;

}