
package AwayMsg;

use strict;
use warnings;

use DBI;
use Data::Dumper;

BEGIN {
    use Exporter ();
    our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
    $VERSION     = 1.00;
    @ISA         = qw(Exporter);
    @EXPORT      = qw(db_connect db_commit expires2timet
                      $dbh);
    %EXPORT_TAGS = ( );
    @EXPORT_OK   = qw();
}

our ($dbh);

sub db_connect () {
    my $dbf;
    foreach my $d (@INC) {
	$dbf = "$d/away.db";
	if (stat $dbf) {
	    chdir($d) or die $!;
	    last;
	}
    }
    $dbh = DBI->connect("dbi:SQLite:away.db",
			 { AutoCommit=>0,
			   RaiseError=>1, ShowErrorStatement=>1
			 })
        or die "$DBI::errstr ?";
}

sub nooutput ($) {
    my ($stmt) = @_;
    my $sth= $dbh->prepare($stmt);
    $sth->execute();
    my $row;
    if ($row= $sth->fetchrow_hashref()) {
	die("REFERENTIAL INTEGRITY ERROR\n".
	    "\n$stmt\n". Dumper($row),"\n");
    }
}

sub expires2timet ($) {
    my ($str) = @_;
    if ($str eq '') {
	return undef;
    }
    open F, "-|", qw(date -d),'$str',qw(+%s) or die $!;
    my $dtime = <F>;
    $?=0; $!=0; close F or die "$? $!";
    $dtime =~ m/^\d+$/ or die "$dtime ?";
    return $dtime+0;
}

sub db_commit () {
    nooutput("SELECT * FROM addresses LEFT JOIN config".
	     " USING (emailaddr) WHERE forwardfile IS NULL");
    nooutput("SELECT * FROM addresses LEFT JOIN texts".
	     " USING (textid) WHERE name IS NULL");
    $dbh->do("COMMIT");
}

1;
