#!/usr/bin/perl -w

# $Id: is_workday,v 1.1 2006/12/27 09:52:30 fany Exp fany $

use strict;

use Getopt::Long qw(GetOptions);

GetOptions(
    'date=s' => \my $Date,
    'help|?' =>
      sub { exec perldoc => -F => $0 or die "exec('perldoc -F $0'): $!\n" },
    'profile=s' => \my $Profile,
) or exit 1;

sub is_holiday(;$$) {    # geklaut aus Dbase::Globals
    my $time    = shift || $^T;
    my $profile = shift || 'DE-BY-noris';
    my @date = ( localtime $time )[ 5, 4, 3 ];
    $date[0] += 1900;
    $date[1]++;
    require Date::Calendar;
    require noris::Date::Calendar::Profiles;
    no warnings 'once';
    my $calendar = Date::Calendar->new(
        ${noris::Date::Calendar::Profiles::Profiles}->{$profile}
          or return -1
    ) or return -1;
    if    ( $calendar->is_full(@date) ) { 1 }
    elsif ( $calendar->is_half(@date) ) { 2 }
    else                                { '' }
}

my $time;
if ( defined $Date ) {
    if ( $Date =~ /\D/ ) {
        require Time::ParseDate and Time::ParseDate->import('parsedate');
        defined( $time = parsedate($Date) )
          or die qq(Unbekanntes Datumsformat bei -date: $Date\n);
    }
    else { $time = $Date }
}

exit( is_holiday( $time, $Profile ) || 0 );

__END__

=head1 NAME

is_workday - ermitteln, ob ein Werktag ist

=head1 SYNOPSE

=head2 Ist gerade in Bayern ein Werktag?

    is_workday && echo Ja.

=head2 War fanys Geburtstag in Deutschland ein Werktag?

    is_workday -date 1975-10-24 -profile DE && echo Ja.

=head1 BESCHREIBUNG

Dieses Programm ermittelt, ob ein bestimmtes Datum in einem bestimmten
(Bundes-)Land auf einen Werktag fiel oder fllt und gibt einen entsprechenden
Exit-Status aus:

=over 4

=item 0

Werktag

=item 1

Feiertag

=item 2

halber Feiertag

=item 255

Fehler

=back

B<Samstage zhlen hier I<nicht> als Werktage.>

=head1 OPTIONEN

=over 4

=item -help

=item -?

um (nur) diese Dokumentation anzeigen zu lassen

=item -date Datum

zur Angabe eines Datums in irgendeinem fr L<Time::ParseDate> verstndlichen
Format.
Voreingestellt ist das aktuelle Datum.

=item -profile Kalenderprofil

zur Auswahl eines L<Date::Calendar::Profiles|Kalenderprofils>.
Voreingestellt ist C<DE-BY>, also Bayern.

=back

=head1 AUTOR

 Martin H. Sluka <fany@noris.net>
 fr die noris network AG

