#!/usr/bin/perl
use strict; use warnings;

use lib '/home/pcrow/play/AddressBook/lib';

use Date::Manip qw( ParseDate DateCalc UnixDate );
use Gantry::Conf;
use AddressBook::Model;
use AddressBook::Model::bday    qw( $BDAY    );

my $instance = shift || 'address';

my $conf = Gantry::Conf->retrieve( {
        instance    => $instance,
        config_file => '/etc/gantry.conf.2',
} );

my $schema = AddressBook::Model->connect(
    $conf->{ dbconn }, $conf->{ dbuser }, $conf->{ dbpass },
);

my $today = ParseDate( 'today' );
my $comp_err;

my @bdays = $BDAY->ssearch( $schema );

foreach my $bday_row ( @bdays ) {
    ( my $db_date = $bday_row->bday ) =~ s{-}{/}g;

    my $bday    = ParseDate( $db_date );
    my $name    = $bday_row->name;
    my $family  = $bday_row->address->foreign_display();

    my $separation       = DateCalc( $today, $bday, \$comp_err );
    my ( $weeks, $days ) = ( split /:/, $separation )[2,3];
    my $sign             = substr $separation, 0, 1;

    my $prep = ( $sign eq '+' ) ? 'from now' : 'ago';

    $days += 7 * $weeks;

    my $short_bdate = UnixDate( $bday, "%B %e" );

    if ( abs( $days ) < 14 ) {
            print "$name belonging to $family birth day:\n"
                    .   "   $days days $prep on $short_bdate.\n";
    }
}
