#!/usr/bin/perl

use strict;
use warnings;

use lib(qw/Core Classes/);
use GroupsManager;
use MembersManager;
use Algorithm::Cluster;


my $groups_manager = new GroupsManager();

my @GROUPS = $groups_manager->all_groups();
print scalar(@GROUPS)."\n";

for (my $i = 0; $i < scalar(@GROUPS); $i++){
    printf "\n%s %03d: ", $GROUPS[$i]->{NAME}, $GROUPS[$i]->{ID};
#    printf "\n%s : ", $GROUPS[$i]->{NAME};
    for(my $j = 0 ; $j < scalar(@GROUPS); $j++){
	if ($i == $j) {next;}
	my ($dist, $common_mem) = &calcDistanceTwoGroups($i,$j);
	if ($dist == 0){
		#printf "\t%s %03d (%s)\n", $GROUPS[$j]->{NAME}, $GROUPS[$j]->{CODE}, $common_mem;
		printf "\t%s (%s) :", $GROUPS[$j]->{NAME}, $common_mem;
	}
    }
#    print "\n";
} 

sub calcDistanceTwoGroups {
    my ($i, $j) = @_;
    my $gr_i = $GROUPS[$i];
    my $gr_j = $GROUPS[$j];
    my %members_i;
    foreach my $memb (@{$gr_i->{MEMBERS}}){
	$members_i{$memb->{ACCOUNT_ID}} = 1;
    }
    my %members_j;
    foreach my $memb (@{$gr_j->{MEMBERS}}){
        $members_j{$memb->{ACCOUNT_ID}} = sprintf("%s %s", $memb->{FIRSTNAME}, $memb->{LASTNAME});
    }
    my $common_membs = '';
    my $result = 1;
    foreach my $key (sort keys %members_i){
	if (exists $members_j{$key}){
		$common_membs .= $members_j{$key}.";" ;
		$result = 0;
	}
    }
    return ($result, $common_membs);
}


