package Net::RIR_CC::RIR;

use Mouse;
use Carp;

my $rir_data = {
  AFRINIC   => {
    code => 'AF',
    region => 'Africa and Indian Ocean',
    whois_server => 'whois.afrinic.net',
  },
  APNIC     => {
    code => 'AP',
    region => 'Asia-Pacific',
    whois_server => 'whois.apnic.net',
  },
  ARIN      => {
    code => 'AR',
    region => 'North America',
    whois_server => 'whois.arin.net',
  },
  LACNIC    => {
    code => 'LA',
    region => 'Latin America',
    whois_server => 'whois.lacnic.net',
  },
  RIPE      => {
    code => 'RI',
    region => 'Europe',
    whois_server => 'whois.ripe.net',
  },
};

has 'name'          => ( is => 'ro', isa => 'Str', required => 1 );
has 'code'          => ( is => 'ro', isa => 'Str', required => 1 );
has 'region'        => ( is => 'ro', isa => 'Str', required => 1 );
has 'whois_server'  => ( is => 'ro', isa => 'Str', required => 1 );

around BUILDARGS => sub {
  my ($orig, $class, %arg) = @_;

  my $data = $rir_data->{ $arg{name} }
    or croak "Invalid RIR '$arg{name}'";

  $arg{$_} ||= $data->{$_} foreach keys %$data;

  return $class->$orig(%arg);
};

sub dump {
  my $self = shift;
  sprintf "%s\t%s\t%s", $self->name, $self->code, $self->region;
}

=head1 NAME

Net::RIR_CC::RIR - RIR class

=head1 SYNOPSIS

    # Typically returned by a Net::RIR_CC get_rir() call
    $rir = $rc->get_rir('AU');

    # Methods
    print $rir->name;               # e.g. APNIC
    print $rir->code;               # e.g. AP
    print $rir->region;             # e.g. Asia-Pacific
    print $rir->whois_server;       # e.g. whois.apnic.net

    print $rir->dump;

=head1 DESCRIPTION

Net::RIR_CC::RR is a class modelling an RIR (Regional Internet Registry),
one of:

    Name        Code    Region
    -------------------------------------------
    AFRINIC     AF      Africa and Indian Ocean
    APNIC       AP      Asia-Pacific
    ARIN        AR      North America
    LACNIC      LA      Latin America
    RIPE        RI      Europe

=head1 SEE ALSO

L<Net::RIR_CC>

=head1 AUTHOR

Gavin Carr, C<< <gavin at openfusion.com.au> >>

=head1 LICENSE AND COPYRIGHT

Copyright 2013 Gavin Carr.

This program is free software; you can redistribute it and/or modify it
under the terms of either: the GNU General Public License as published
by the Free Software Foundation; or the Artistic License.

See http://dev.perl.org/licenses/ for more information.

=cut

1;