#!/usr/local/bin/perl

use strict;
use Test::More;
use Test::NoWarnings;

use lib qw( ./lib ../lib );

BEGIN { plan tests => 25; }
eval { chdir('t') };

use_ok( 'Nagios::Config' );

ok( my $cf = Nagios::Config->new(Filename => "v2_config/nagios.cfg", Version => 2),
    "Nagios::Config->new()" );

diag( "run tests to make sure inherited Nagios::Config::File methods work" ) if ( $ENV{TEST_VERBOSE} );

is( $cf->get('command_check_interval'), '-1',
    "get('command_check_interval') returns -1" );

is( $cf->get('downtime_file'), $cf->get_attr('downtime_file'),
    "make sure get_attr from v0.02 still works" );

ok( my $list = $cf->get('cfg_file'), "get('cfg_file')" );

is( ref($list), 'ARRAY',
    "getting an attribute that allows multiples returns an arrayref" );

ok( @$list > 2, "arrayref from previous test has more than two elements" );

diag( "run tests to make sure inherited Nagios::Config::Object methods work" ) if ( $ENV{TEST_VERBOSE} );

ok( $cf->resolve_objects, "\$parser->resolve_objects should be ok to call multiple times" );
ok( $cf->register_objects, "\$parser->register_objects should be ok to call multiple times" );

ok( my @hosts = $cf->list_hosts(), "\$parser->list_hosts()" );
ok( my @services = $cf->list_hosts(), "\$parser->list_services()" );

ok( my @hostgroups = $cf->list_hostgroups(), "\$parser->list_hostgroups()" );

my @servicegroups = $cf->list_servicegroups();
ok ( @servicegroups, "\$parser->list_servicegroups()" );

# diag ("service groups: " . join(', ', map { $_->servicegroup_name } @servicegroups));
my $svcgroup1 = (grep { $_->servicegroup_name eq 'svcgroup1' } @servicegroups)[0];

ok ( defined($svcgroup1), "Found servicegroup1 in configuration");

# make sure svcgroup1 has 3 members, each of which is a host/service pair

my $svc_members = $svcgroup1->members();
ok ( scalar(@$svc_members) == 3, "Servicegroup1 should have 3 members");

# diag ("svcgroup1 members: " . join(', ', map { "[" . join(", ", @{$_} ) . "]" } @$svc_members));

{
    sub checkelement {
	my $element = shift;
	my $msg = shift;

	ok ( scalar(@$element) == 2, $msg . " did not have 2 entries" );
	ok ( ref($element->[0]) eq 'Nagios::Host', $msg . " index 0 was not a Nagios::Host" );
	ok ( ref($element->[1]) eq 'Nagios::Service', $msg . " index 1 was not a Nagios::Host" );
    }

    checkelement($svc_members->[0], "Servicegroup1 first entry");
    checkelement($svc_members->[1], "Servicegroup1 second entry");
    checkelement($svc_members->[2], "Servicegroup1 third entry");
}
