#!/usr/local/bin/perl
#
#Script to display projects to which user belongs in PDB
use strict;
use warnings;

use lib "/cell_root/software/HPCC/lib/site_perl";
#use lib "/afs/.glue.umd.edu/software/HPCC/1.1/lib/site_perl";

use Glue::HPCC::Cluster;
use Glue::HPCC::Project::Project;
use Glue::HPCC::Project::Person;
use Glue::HPCC::Project::PersonProject;

use Getopt::Long;
my $VERBOSE=0;

sub usage()
{	print STDERR <<EOF;
$0: List projects to which a user belongs

Usage:
$0 [ -cluster CLUSTER ] [ -role ROLE ] [ -user ]  USERNAME

Lists projects in CLUSTER for which USERNAME has role ROLE.
ROLE defaults to member, CLUSTER defaults based on host running on.

EOF
}


		
#-------------------------------------------------------------------
#		Main
#-------------------------------------------------------------------

my $help;
my $username;
my $cluster;
my $role='member';

my $res = GetOptions(
	'help!' => \$help,
	'cluster=s' => \$cluster,
	'role=s' => \$role,
	'username=s' => \$username,
	
);

unless ( $res ) 
{	usage;
	die "\nError processing options.\n";
}
if ( $help )
{	usage;
	exit 0;
}

$username = shift @ARGV unless ( $username );

$role = lc $role;
$role = 'coord' if $role eq 'coordinator';
unless ( $role eq 'member' || $role eq 'poc' || $role eq 'coord' )
{	usage;
	die "Illegal role '$role', want one of member, poc, or coord.\n";
}

if ( scalar(@ARGV) )
{	my $tmp = join ", ", @ARGV;
	usage;
	die "\nError: extraneous arguments [ $tmp ], aborting\n";
}

#Default cluster if needed
my $hpc = Glue::HPCC::Cluster->new_from_clustername($cluster);
die "\nInvalid cluster $cluster at " if $cluster && ! $hpc && ! ref($hpc);
die "\nError instantiating cluster $hpc " unless $hpc && ref($hpc);
$cluster = $hpc->db_clustername;

#my $user = Glue::HPCC::Project::Person->person_by_username($hpc, $username);
#unless ( $user )
#{	die "No user $username found in PDB.\n";
#}
#unless ( ref($user) )
#{	die "***ERROR looking up user $username in PDB: $user\n";
#	return;
#}

#my $pkey = $user->ppl_pkey;

my $pplprjs = Glue::HPCC::Project::PersonProject->get_project_persons_by_username($hpc,$username);
unless ( $pplprjs )
{	exit 0;
}
unless ( ref($pplprjs) eq 'ARRAY' )
{	die "***ERROR looking up projects for user $username at ";
	return;
}

PPLPRJ: foreach my $pplprj (@$pplprjs)
{	my $prj_pkey = $pplprj->prj_pkey;
	my $is_member = $pplprj->is_member;
	my $is_poc = $pplprj->is_poc;
	my $is_coord = $pplprj->is_coordinator;

	next PPLPRJ if $role eq 'member' && ! $is_member;
	next PPLPRJ if $role eq 'poc' && ! $is_poc;
	next PPLPRJ if $role eq 'coord' && ! $is_coord;

	my $proj = Glue::HPCC::Project::Project->project_by_pkey(
			$hpc, $prj_pkey);
	unless ( $proj )
	{	die "***ERROR: no project with pkey=$prj_pkey but " .
			"referenced in PersonProject table at ";
	}
	unless( ref($proj) )
	{	die "***ERROR looking up project with pkey=$prj_pkey: "
			. "$proj at ";
		exit;
	}
	my $project = $proj->name;

	print "$project\n";
}
