#!/usr/bin/perl
#
# Wed Oct  3 09:21:33 BST 2007 © Frank Shute.
#
# Copy a prototype letter, name & date it and put it in the file hierarchy.
#
# Usage: letter <letterdir/letter>
#
# E.g: $ letter bank/rbs
#
# will create a template letter under that subdir named:
#
# rbs-03Oct07.tex



use strict;
use warnings;
use File::Copy;
use Env qw(HOME VISUAL);
use Date::Calc qw(Today Month_to_Text);

# Assign some variables.

my $letters_dir="$HOME/latex/letters/";
my $letter_proto="$HOME/latex/protos/letter2.tex";
my $tmp_header_pic="/tmp/shute_org.eps";
my $header_pic="$HOME/latex/headers/shute_org.eps";
my $EDITOR="/usr/local/bin/gvim -geom 80x35";

# Copy header pic to /tmp, if needed.

if (! -e $tmp_header_pic) {
	copy("$header_pic", "$tmp_header_pic")||
	die "Can't copy $header_pic to $tmp_header_pic: $!\n";
}

my $file_prefix = $ARGV[0] || die "Usage: letter <letterdir/lettername>\n";

my $letter = "$file_prefix" . "\-" . get_date() . ".tex";

my $new_letter = $letters_dir . $letter;

print "Copying $letter_proto to $new_letter\n";

sleep(2);

copy("$letter_proto", "$new_letter") || 
die "Can't copy $letter_proto to $new_letter: $!\n";

my ($year,$month,$day) = Today();
my $day_of_week = $day;
my $month_as_txt = Month_to_Text($month);
my $this_year = $year;

my $letter_date = $month_as_txt . " " . $day_of_week . ", " . $this_year;


# From Cookbook p.244

open(F, "+< $new_letter")	or die "can't read $new_letter: $!";
my $out = '';
while (<F>) {
	s/^\%\%date /\\date\{$letter_date\} /g;
	$out .= $_;
}
seek(F, 0, 0)		or die "can't seek to start of $new_letter: $!";
print F $out		or die "can't print to $new_letter: $!";
truncate(F, tell(F))	or die "can't truncate $new_letter: $!";
close F			or die "can't close $new_letter: $!";


system "$EDITOR $new_letter";


$file_prefix =~ s/\/.*$//;

my $letter_dir =  $letters_dir . $file_prefix . "/";

print "$new_letter\n";
print "cd $letter_dir\n";

##-> Subfuncs <-##

# Return todays date formatted. eg: 02Oct07

sub get_date {

my ($year,$month,$day) = Today();
my $day_of_week = $day;
my $month_as_txt = Month_to_Text($month);
my $short_month = substr($month_as_txt, 0, 3);
my $trunc_year = substr($year, 2);

# Format day of week correctly eg: 9 -> 09

if ($day_of_week < 10)
	{
	$day_of_week = "0" . $day_of_week;
	}

my $my_date = $day_of_week . $short_month . $trunc_year;

return $my_date;
}