The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Acme::Terror::NL;
use strict;
use LWP::Simple;

use vars qw($VERSION);
$VERSION = '0.04';

use constant {
   UNKNOWN        => 0,
   CRITICAL       => 1,
   SUBSTANTIAL    => 2,
   LIMITED        => 3,
   MINIMAL        => 4,
};

sub new {
   my ($class, %args) = @_;
   my $self = {};
   bless $self, $class;
   $self->{_level}     =  UNKNOWN;
   $self->{_level_txt} = "UNKNOWN";
   return $self;
}

sub fetch {
   my $self = shift;
   my $uri  = 'http://english.nctb.nl/';
   my $html = get($uri);
   if($html =~ m!href=".+?current_threat_level.+?"[^>]+>\s*(MINIMAL|LIMITED|SUBSTANTIAL|CRITICAL)</a>!is){
      my $lvl = $1;
      if($constant::declared{__PACKAGE__."::".$lvl}) {
         $self->{_level} = eval $lvl;
         $self->{_level_txt} =  $lvl;
      }
   }
   return $self->{_level_txt};
}

sub text {
   my $self = shift;
   $self->fetch unless($self->{_level});
   return $self->{_level_text};
}

sub level {
   my $self = shift;
   $self->fetch unless($self->{_level});
   return $self->{_level};
}

#-------------------------------------------------------------------#

=head1 NAME

Acme::Terror::NL - Fetch the current NL terror alert level

=head1 SYNOPSIS

  use Acme::Terror::NL;

  my $t = Acme::Terror::NL->new();  # create new Acme::Terror::NL object

  my $level = $t->fetch;
  print "Current terror alert level is: $level\n";

=head1 DESCRIPTION

Gets the currrent terrorist threat level in the Netherlands.

The levels are either...

 CRITICAL    - there are strong indications that an attack will occur 
 SUBSTANTIAL - there is a realistic possibility that an attack will occur
 LIMITED     - it appears that attacks can be prevented.
 MINIMAL     - it is unlikely that attacks are being planned.
 UNKNOWN     - cannot determine threat level

There are "only" four levels present in the Netherlands, unlike, e.g. the
United Kingdom and the United States of America, where there are five.
Thats what you get for being a small country.

This module aims to be compatible with the US version, L<Acme::Terror>,
the UK version, L<Acme::Terror::UK> and the AU version, L<Acme::Terror::AU>.

=head1 METHODS

=head2 new()

  use Acme::Terror::NL;
  my $t = Acme::Terror::NL->new(); 

Create a new instance of the Acme:Terror::NL class.

=head2 fetch()

  my $threat_level_string = $t->fetch();
  print $threat_level_string;

Return the current threat level as a string.

=head2 text()

See C<fetch()>, it returns the same.

=head2 level()

  my $level = $t->level();
  if ($level == Acme::Terror::NL::CRITICAL) {
    print "too many L<Acme::Code::FreedomFighter>s!";
  }

Return the level of the current terrorist threat as a comparable value.

The values to compare against are,

  Acme::Terror::NL::CRITICAL
  Acme::Terror::NL::SUBSTANTIAL
  Acme::Terror::NL::LIMITED
  Acme::Terror::NL::MINIMAL

If it can't retrieve the current level, it will return

  Acme::Terror::NL::UNKNOWN

=head1 BUGS

Blame the terrorists! ... or report it to L<http://rt.cpan.org/Public/Dist/Display.html?Name=Acme::Terror::NL>.

=head1 AUTHOR

M. Blom,
E<lt>blom@cpan.orgE<gt>
L<http://menno.b10m.net/perl/>

=head1 COPYRIGHT

This program is free software; you can redistribute
it and/or modify it under the same terms as Perl itself.

The full text of the license can be found in the
LICENSE file included with this module.


=head1 SEE ALSO

=over 4

=item * L<Acme::Terror>, L<Acme::Terror::UK>, L<Acme::Terror::AU>

=item * L<http://english.nctb.nl/>

=back

=cut

1;