use strict;
use Time::HiRes qw(gettimeofday);

my $stanzas = 4;
my $lines = 4;
my $prose_file = "/home/aa/perl/poetry/prose";
my $words_file = "/home/aa/perl/poetry/words"; # taken from /usr/share/dict/words
my $debug = 1;

my $start_time = gettimeofday;
my @words = load_words();
my @proses = load_prose();
my $poem = generate_poem();
my $end_time = gettimeofday;
my $processing_time = $end_time - $start_time;
print "\n$poem";
if ($debug >= 1) { print "Duration: $processing_time\n"; }

sub generate_poem {
    if ($debug >= 1) { print "Generating poem..\n"; }
    my $poem;
    my $stanza_number = 1;
    while ($stanza_number <= $stanzas) {
	my $line_number = 1;
	while ($line_number <= $lines) {
	    my $prose = $proses[rand(int(@proses))];
	    while ($prose =~ m/RAND/) {
		$prose =~ s/RAND/$words[rand(int(@words))]/;
	    }
	    $prose =~ s/\n//g;
	    $prose =~ s/\'s//g;
	    $prose = lc($prose);
	    if ($debug >= 1) { $poem .= "$stanza_number $line_number "; }
	    $poem .= "$prose\n";
	    $line_number++
	}
	$poem .= "\n";
	$stanza_number++;
    }
    return $poem;
}

sub load_prose {
    if ($debug >= 1) { print "Loading prose..\n"; }
    open(FILE, $prose_file);
    my @lines = <FILE>;
    close(FILE);
    return @lines;
}

sub load_words {
    if ($debug >= 1) { print "Loading words..\n"; }
    open(FILE, $words_file);
    my @lines = <FILE>;
    close(FILE);
    return @lines;
}