#!/usr/bin/perl

sub main_menu {
	
	print "\n\tSelect an option:\n\n";
	print "\t[V]iew Tasks\n";
	print "\t[A]dd A Task\n";
	print "\t[M]odify A Task\n";
	print "\t[O]ptions\n";
	print "\t[Q]uit\n\n";
	print "Option: ";

	chomp($main_opt = <STDIN>);
	
	if ($main_opt =~ m/V/i) {
		&view_menu;
	} elsif ($main_opt =~ m/A/i) {
		&add_menu;
	} elsif ($main_opt =~ m/M/i) {
		&modify_menu;
	} elsif ($main_opt =~ m/O/i) {
		&options_menu;
	} elsif ($main_opt =~ m/Q/i) {
		&quit_menu;
	} else {
		&main_menu;
	}
}

sub add_menu {

	print "\nAdd Task: ";
	
	$new_task = <STDIN>;
	
	open (CHKFILE, 'tasks');
	
	if (<CHKFILE>) {
		close (CHKFILE);
		open (MYFILE, '>>tasks');
		print MYFILE $new_task;
		close (MYFILE);
	} else {
		close (CHKFILE);
		open (MYFILE, '>tasks');
		print MYFILE $new_task;
		close (MYFILE);
	}
	
	&main_menu;
}

sub view_menu {
	undef(@tasks);
	$i = 0;
	open (MYFILE, 'tasks');
	print "\n\tView Tasks:\n\n";
	while (<MYFILE>) {
		chomp;
		print "\t[$i] $_\n";
		push (@tasks, $_);
		$i++;
	} unless ($_ = undef) {
	}
	
	close (MYFILE);
	
	$total = (@tasks - 1);
	if ($total < 0) {
		print "\n*** No Tasks To View ***";
		print "\n*** Returning To Main Menu ***\n";
		&main_menu;
	} else {
		print "\n[R]eturn to the Main Menu: ";
		chomp($view_opt = <STDIN>);
	
		if ($view_opt =~ m/R/i) {
			&main_menu;
		} else {
			&view_menu;
		}
	}
}

sub modify_menu {
	undef(@tasks);
	$i = 0;
	open (MYFILE, 'tasks');
	print "\n\tModify Task:\n\n";
	
	while (<MYFILE>) {
		chomp;
		print "\t[$i] $_\n";
		push (@tasks, $_);
		$i++
	} unless ($_ = undef) {
	}
	
	close (MYFILE);
	
	$total = (@tasks - 1);
	if ($total < 0) {
		print "\n*** No Tasks To Modify ***";
		print "\n*** Returning To Main Menu ***\n";
		&main_menu;
	} else {
		print "\nTask [#] to modify, or [R]eturn to Main Menu: ";
		chomp($modify_opt = <STDIN>);
	
		if ($modify_opt =~ m/[0-$total]/) {
			&modify_da;
		} elsif ($modify_opt =~ m/R/i) {
			undef(@tasks);
			&main_menu;
		} else {
			undef(@tasks);
			&modify_menu;
		}
	}
}

sub modify_da {
		print "\n\tWhat do you want to do with task " . $modify_opt . "?\n";
		print "\t[" . $modify_opt . "] " . $tasks[$modify_opt] . "\n\n";
		
		print "\t[D]elete Task\n";
		print "\t[A]lter Task\n";
		print "\t[R]eturn to the Main Menu\n\n";
		print "Option: ";
		chomp($modify_exe = <STDIN>);
		
			if ($modify_exe =~ m/D/i) {
				
				delete $tasks[$modify_opt];
				
				open (MYFILE, '>tasks');
				
				foreach (@tasks) {
					if ($_) {
						print MYFILE $_ . "\n";
					}
				}
				
				close (MYFILE);
				undef(@tasks);
				
				print "\n *** DELETED task " . $modify_opt . " ***\n";
				
				&main_menu;
				
			} elsif ($modify_exe =~ m/A/i) {
				print "\nNew Text: ";
				chomp($new_text = <STDIN>);
				$tasks[$modify_opt] = $new_text;
				
				open (MYFILE, '>tasks');
				
				foreach (@tasks) {
					if ($_) {
						print MYFILE $_ . "\n";
					}
				}
				
				close (MYFILE);
				undef(@tasks);
				
				print "\n *** UPDATED task " . $modify_opt . " ***\n";
				&main_menu;
			} elsif ($modify_exe =~ m/R/i) {
				&main_menu;
			} else {
				modify_da;
			}	
}

sub quit_menu {
	print "\nThank you for using perlister.\n\n";
	exit;
}

sub options_menu {
	print "\n\tSelect an option:\n\n";
	print "\t[E]xport Tasks To XML\n";
	print "\t[C]lear Task List\n";
#	print "\tE[X]ecute Task List In Shell\n";
	print "\t[R]eturn To Main Menu\n";
	print "\t[Q]uit\n\n";
	print "Option: ";
	
	chomp($options_opt = <STDIN>);
	
	if ($options_opt =~ m/E/i) {
		&export_menu;
	} elsif ($options_opt =~ m/C/i) {
		&clear_menu;
#	} elsif ($options_opt =~ m/X/i) {
#		&execute_menu;
	} elsif ($options_opt =~ m/R/i) {
		&main_menu;
	} elsif ($options_opt =~ m/Q/i) {
		&quit_menu;
	} else {
		&options_menu;
	}
}

#sub execute_menu {
#	undef(@tasks);
#	$i = 0;
#	open (MYFILE, 'tasks');
#	
#	while (<MYFILE>) {
#		push (@tasks, $_);
#		$i++
#	} unless ($_ = undef) {
#	}
#	
#	close (MYFILE);
#	
#	foreach (@tasks) {
#		`$_`;
#	}
#	exit;
#}

sub clear_menu {
	open (MYFILE, '>tasks');
	print MYFILE "";
	close (MYFILE);
	
	print "\n *** CLEARED task list ***\n";
	
	&main_menu;
}

sub export_menu {
	open (MYFILE, 'tasks');
	while (<MYFILE>) {
		chomp;
		push (@tasks, $_);
	} unless ($_ = undef) {
	}
	
	open (XMLFILE, '>tasks.xml');
	print XMLFILE "<?xml version=\"1.0\"?>\n";
	print XMLFILE "<!-- Exported from perlister -->\n\n";
	print XMLFILE "<task_list>\n\n";
	$i = 0;
		foreach (@tasks) {
			if ($_) {
				print XMLFILE "\t<task id=\"" . $i . "\">";
				print XMLFILE $_ . "</task>\n";
				$i++;
			}
		}
	print XMLFILE "\n</task_list>";
	close (XMLFILE);
	undef(@tasks);
	
	print "\n *** EXPORTED task list to tasks.xml ***\n";
	
	&main_menu;
}

&main_menu;
