#!/usr/bin/perl

# simple TODO-manager

use strict;
use warnings "all";
use 5.10.0;
use Getopt::Long;

sub readtodo();

my $file = "$ENV{HOME}/todo.txt";
my ($delete, $help);

Getopt::Long::GetOptions(
"del"    => \$delete,
"d"      => \$delete,
"delete" => \$delete,
"help"   => \$help
);

if ($help) {
	say "Usage: $0 --delete NUM";
	say "       $0 --del NUM";
	say "       $0 --d NUM";
	say "       deletes string number NUM";
	say "";
	say "       $0 some thing to-do";
	say "       adds memo";
	exit 0;
}

if ($delete) {
	die "NUM not set\n" if ($ARGV[0] !~ /^\d+$/); 
	my @TODO = readtodo();
	die "NUM too big\n" if ($ARGV[0] > @TODO);

	my $cnt = 0;
	my $str = '';
	open (TD, ">", $file) or die "Unable to open $file: $!\n";

	for (my $i = 0; $i < @TODO; $i++) {
		next if ($i == $ARGV[0]);
		next unless (defined($TODO[$i]));
		print    sprintf("%s. %s\n", $cnt, $TODO[$i]);
		print TD sprintf("%s. %s\n", $cnt, $TODO[$i]);
		$cnt++;
	}

	close TD;
} else {
	my @TODO = readtodo();

	if (@ARGV > 0) {
		push @TODO, join(" ", @ARGV);
		open (TD, ">", $file) or die "Unable to open $file: $!\n";

		for (my $i = 0; $i < @TODO; $i++) {
			next unless (defined($TODO[$i]));
			print    sprintf("%s. %s\n", $i, $TODO[$i]);
			print TD sprintf("%s. %s\n", $i, $TODO[$i]);
		}

		close TD;
	} else {
		for (my $i = 0; $i < @TODO; $i++) {
			next unless (defined($TODO[$i]));
			print sprintf("%s. %s\n", $i, $TODO[$i]);
		}
	}
}

exit 0;

sub readtodo() {
	my @TODO;
	open (T, "<", $file) or return @TODO;
	@TODO = <T>;
	close T;

	@TODO = map {
		chomp;
		$_ =~ /\s*\d+\. (.+)/;
		$1;
	} @TODO;

	return @TODO;
}
