package CheckWildCard;
{
    use Object::InsideOut;
    use Net::hostent;
    use Socket;

    my @result : Field : Arg(result) : All(result) : Type(List(Node));
    
    my @start : Field : Arg(start) : All(start);
    my @startstr : Field : Arg(startstr) : All(startstr);
    my @end : Field : Arg(end) : All(end);
    my @endstr : Field : Arg(endstr) : All(endstr);
    my @elasp : Field : Arg(elasp) : All(elasp);

    # execute: Domain ->  CheckWildCard
    # check for WildCards and returns the data in an Array
    sub execute {
        my ($self, $domain_obj) = @_;
        
        my $start = time();
        my $startstr = localtime($start);
        $self->start($start);
        $self->startstr($startstr);

        my $domain = $domain_obj->domain;
        my (@data, $h);
        $wildcard_dns = 1e11 - int(rand(1e10));
        if ($h = gethost("$wildcard_dns.$domain")) {
            my $wildcard_addr = inet_ntoa($h->addr);
            push(@data, Node->new(hostname => "$wildcard_dns.$domain", ip => $wildcard_addr, from => 'Check Wildcard') );
        } 
        $self->result(@data);
        
        my $end = time();
        my $endstr = localtime($end);
        $self->end($end);
        $self->endstr($endstr);
        my $elasp = $end - $start;
        $self->elasp($elasp);

        return $self;
    }
 
    # check: Domain -> Bool
    # determine if there is a WildCard
    sub check {
        my ($self, $domain_obj) = @_;
        my $domain = $domain_obj->domain;
        my $h;
        $wildcard_dns = 1e11 - int(rand(1e10));
        if ($h = gethost("$wildcard_dns.$domain")) {
            return 1;
        } else {
            return undef;
        }

    }
}

1;
