package RT::Action::CIFMinimal_ProcessReport;

use strict;
use warnings;

use base 'RT::Action::Generic';
use RT::CIFMinimal;
use Regexp::Common qw(net);
use Regexp::Common::net::CIDR;

sub Prepare { return(1); }

sub Commit {
    my $self = shift;

    my $tkt = $self->TicketObj();

    $tkt->SetOwner($tkt->CreatorObj->Id());
    my $addr = $tkt->FirstCustomFieldValue('Address');
    my $hash = $tkt->FirstCustomFieldValue('Hash');
    unless($addr || $hash){
        $tkt->SetStatus('rejected');
        return(undef);
    }

    my $cf = RT::CustomField->new($self->CurrentUser());
    
    if($addr){
        if($addr =~ /^$RE{'net'}{'IPv4'}$/){
            my $autoreject = RT->Config->Get('CIFMinimal_RejectPrivateAddress') || 1;
            if($autoreject && RT::CIFMinimal::IsPrivateAddress($addr)){
                $self->TicketObj->SetStatus('rejected');
                return(undef);
            }
            my $network_info = RT::CIFMinimal::network_info($addr);
            if($network_info){
                if($network_info->{'description'}) { $network_info->{'asn'} = $network_info->{'asn'}.' '.$network_info->{'description'}; }
                my $msg = $network_info->{'asn'}.' | '.$network_info->{'cidr'}.' | '.$network_info->{'cc'}.' | '.$network_info->{'rir'}.' | '.$network_info->{'modified'};
                $tkt->Comment(Content => $msg);
                $tkt->AddCustomFieldValue(Field => 'ASN', Value => $network_info->{'asn'});
                $tkt->AddCustomFieldValue(Field => 'BGP Prefix', Value => $network_info->{'cidr'});
                my $text = `whois -h whois.arin.net "n $addr"`;
                $tkt->Comment(Content => $text);
            }
        }
    }

    $self->TicketObj->SetStatus('open');
}

1;