#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;
use XML::LibXML;


## 
my $grade_sheet=$ARGV[0];
if(not defined($grade_sheet)) {
  print "fatal: no grade_sheet argument\n";
  exit;
}

if(not -f $grade_sheet) {
  print "fatal: no such file '$grade_sheet'\n";
  exit;
}

## get the password for wotan as me
my $whoami=`whoami`;
chomp $whoami;


## read passwords, this is only required
## to check the user names on file
my $get_command="ssh $whoami\@wotan cat /etc/passwd";

## a hash of the known users
my $known_users;
foreach my $line (`$get_command`) {
  my $data=&parse_password_line($line);
  $known_users->{$data->{'user'}}=1;
}

my $doc=XML::LibXML->load_xml(location=>$grade_sheet);

my @student_elements=$doc->getElementsByTagName('student')->get_nodelist;

my $out_string='';
foreach my $student_element (@student_elements) {
  my @names=$student_element->getElementsByTagName('name')->get_nodelist;
  my $name=$names[0]->textContent // '';
  my @secrets=$student_element->getElementsByTagName('code')->get_nodelist;
  my $secret=$secrets[0]->textContent // '';
  if(not $secret) {
    print "fatal: no secret word for $name\n";
    exit;
  }
  my @users=$student_element->getElementsByTagName('user')->get_nodelist;
  my $user=$users[0]->textContent // '';
  if(not $user) {
    print "fatal: no username for $name\n";
    exit;
  }
  if(not defined($known_users->{$user})) {
    print "fatal: no such '$user' in wotan's password file\n";
    exit;
  }
  $out_string.="$user $secret\n";
}

## print out_string only at the end
print $out_string;

exit;


## from wotan's perl/passwd_to_gradesheet
sub parse_password_line {
  my $line=shift;
  # returned value
  my $o;
  my @fields=split(':',$line);
  #print Dumper @fields;
  $o->{'user'}=$fields[0];
  ## personal information
  my $personal=$fields[4];
  @fields=split(',',$personal);
  $o->{'name'}=$fields[0];
  $o->{'email'}=$fields[4];
  return $o;
}


sub format_yodl {
  my $o=shift;
  my $user=$o->{'user'};
  my $name=$o->{'name'};
  return "surl($name)(http://wotan.liu.edu/home/$user/) surl(omeka site)(http://wotan.liu.edu/home/$user/omeka/)nl()\n"; 
}
