#!/usr/bin/perl

use strict;
use warnings;

use FindBin (qw($Bin));
use lib ("$Bin/lib");

use LiCoM::Config (qw(get_config));
use LiCoM::Person;

our $Config;

if (-e $ENV{'HOME'} . '/.licomrc')
{
	$Config = get_config ($ENV{'HOME'} . '/.licomrc');
}
elsif (-e '/etc/licom/licom.conf')
{
	$Config = get_config ('/etc/licom/licom.conf');
}
else
{
	$Config = get_config ();
}

unless (defined ($Config->{'uri'}) and defined ($Config->{'bind_dn'})
	and defined ($Config->{'password'}))
{
	die (<<ERROR);
The configuration has not been found or is not complete. At least the options
uri, bind_dn and password are needed.
ERROR
}

$Config->{'base_dn'} = $Config->{'bind_dn'} unless (defined ($Config->{'base_dn'}));

our @Patterns = ();
for (@ARGV)
{
	my $temp = $_;
	$temp =~ s/[^\.\*\w\s]//g;

	next unless ($temp);

	$temp =~ s/\**$/*/;
	push (@Patterns, [[lastname => $temp], [firstname => $temp], [mail => $temp]]);
}

die ('No (valid) patterns found.') unless (@Patterns);

LiCoM::Person->connect 
(
	uri	=> $Config->{'uri'},
	base_dn => $Config->{'base_dn'},
	bind_dn => $Config->{'bind_dn'},
	password => $Config->{'password'}
) or die;

our @Matches = LiCoM::Person->search (@Patterns, [[mail => '*']]);

print STDOUT scalar (@Matches), ' ', (scalar (@Matches) == 1 ? 'entry' : 'entries'), " found.\n";

for (@Matches)
{
	my $person = $_;
	my $cn = $person->name ();
	my @mail = $person->get ('mail');

	for (@mail)
	{
		print "$_\t$cn\tFound by LiCoM\n";
	}
}

LiCoM::Person->disconnect ();

exit (0);
