#!/usr/bin/perl -w
use strict;
use English;
use Data::Dumper;
use Time::HiRes qw(sleep time alarm);
use POSIX qw(strftime);
use DBI;
die "You must provide at least one filename!" if scalar @ARGV < 1;
my $dbc = DBI->connect("DBI:Pg:dbname=wiley;host=localhost;port=5432;sslmode=prefer", "quixadhal", "tardis69", { AutoCommit => 0, PrintError => 0, });
my $insert_query = $dbc->prepare( qq!
   INSERT INTO board_messages ( board_id, message_id, message_date, message_sender, message_header, message_text )
               VALUES ( ?, ?, to_timestamp( ?, 'Dy Mon DD HH24:MI:SS YYYY'), trim(?), trim(?), ?);
   !);
foreach my $filename (@ARGV) {
    $filename =~ /^(\d+)\.txt$/;
    my $vnum = $1;
    die "Invalid file: $filename" if !defined $vnum;
    open FP, $filename or die "Cannot open $filename: $!";
    my $id = 0;
    my $rv = $dbc->do( qq!
        DELETE FROM board_messages WHERE board_id = ?
    !, undef, $vnum);
    if($rv) {
        print "CLEARED: $vnum\n";
        $dbc->commit;
    } else {
        $dbc->rollback;
    }
    print "Processing $filename...\n";
    while(my $line = <FP>) {
        chomp $line;
        $line =~ /^([^\(]+)\((\w+)\)\s+(.+)$/;
        my ($subject, $sender, $date) = ($1, $2, $3);
        next if !defined $subject;
        next if !defined $sender;
        next if !defined $date;
        my $body = "";
        while(my $bodyline = <FP>) {
            chomp $bodyline;
            last if $bodyline eq ".";
            $body .= "$bodyline\r\n";
        }
        my $rv = $insert_query->execute($vnum, $id, $date, $sender, $subject, $body);
        if($rv) {
            print "ADDED:   $subject ($sender) $date\n";
            $dbc->commit;
            $id++;
        } else {
            print "FAILED:  $subject ($sender) $date\n";
            $dbc->rollback;
        }
    }
    print "Done!\n";
    close FP;
}
$dbc->disconnect();
1;