#!/usr/local/bin/perl -w

#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>#
#  pquota_user_admin.pl                    #
#                                          #
#  written by david bonner                 #
#  dbonner@cs.bu.edu                       #
#  theft is treason, citizen               #
#                                          #
#  admin script used to manage the pquota  #
#  user databases                          #
#<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<#

use Pquota;
use strict;
use vars qw ( $pquota $opt_P );

# location of pquota databases, name of default printer
sub PQUOTA_DIR { return '/usr/local/lib/pquota'; }
sub DEFAULT_PRINTER { return 'boris'; }

# get pquoa object
$pquota = Pquota->new (PQUOTA_DIR, {'UseDB' => 'NDBM_File',
                                    'Serializer' => 'Storable'});

# read command line
getopt ('P');
unless ($ARGV[0]) {
  usage();
}
if ($ARGV[0] eq 'check') {
  user_check();
}
elsif ($ARGV[0] eq 'print') {
  print_pages();
}
else {
  usage();
}

$pquota->close();
exit 0;


#>>>>>>>>>>>>>>>#
#  subroutines  #
#<<<<<<<<<<<<<<<#


##  usage message
sub usage {
  print <<__END_USAGE__;
Usage: $0 command [-P printer] [args]

$0 [-P printer] check user
        Checks to see how many pages the user can print on the printer.
        
$0 [-P printer] print user pages
        Subtracts the appropriate amount from the user's quota.
__END_USAGE__

  exit (1);
}


##  checks for the number of pages the user can print, used by the
##  printer interface scripts
sub user_check {
  my $user = $ARGV[1];
  my $printer = $opt_P || DEFAULT_PRINTER;
  my $cost = $pquota->printer_get_cost ($printer);
  my $quota = $pquota->user_get_current_by_printer ($user, $printer);

  unless ($cost && $quota) {
    print STDERR "Unable to check quota\n";
    #print "0\n";
  }
  
  print int ($quota / $cost)."\n";
}


##  adjusts the user's current quota to reflect the number of pages
##  they just printed
sub print_pages {
  my $user = $ARGV[1];
  my $pages = $ARGV[2];
  my $printer = $opt_P || DEFAULT_PRINTER;
  my $cost = $pages * $pquota->printer_get_cost ($printer);
  my $sem;
  
  unless ($pquota->user_print_pages ($user, $printer, $pages)) {
    print STDERR "Quota not deducted.\n";
    return 0;
  }
  
  return 1;
}