package Opals::Permission;

require Exporter;
@ISA       = qw(Exporter);
# Symbols to be exported by default
#@EXPORT    = qw(
#    opl_
#);
# Symbols to be exported on request

@EXPORT_OK = qw(
    permission_getList
    permission_getDefaultPermission
    permission_getDefaultPermissionByType
    permission_getCustomPermList
);

# Version number
$VERSION   = 0.01;      

#use utf8;
use strict;
use Opals::Context;

############################################################
#
# function permission_getList
#   return : permission list by subsytem : (Library,Textbook,Equipment....) 
#
my $textbookMgmnt = Opals::Context->preference('textbookMgmnt');
my $equipmentMgmnt= Opals::Context->preference('equipmentMgmnt');

sub permission_getList {
    my ($dbh) = @_;

    my @arr=(1,2);
    if($textbookMgmnt && $textbookMgmnt == 1){
        push @arr,3;
    }
    if($equipmentMgmnt && $equipmentMgmnt == 1){
        push @arr,4;
    }
    my $sysList= join(",",@arr);
    my $permission={};
    my $sql   = "select ss.id sysId, ss.name system,pG.name grpName, p.name as permission, p.code as code 
                from opl_permGroup as pG 
                inner join opl_permission as p on pG.id = p.grpId 
                inner join opl_subSystem ss on pG.ssId=ss.id   
                where ss.id in ($sysList)
                order by ss.id,grpName, p.id";
   
     my $sth = $dbh->prepare($sql);
     $sth->execute();

     while(my ($sysId,$system,$grpName,$pName,$pCode) = $sth->fetchrow_array){
        if(!defined $permission->{$sysId}){
             $permission->{$sysId}={};
        }
        if(!defined $permission->{$sysId}->{$grpName}){
            $permission->{$sysId}->{$grpName}=[];
        }
        push @{$permission->{$sysId}->{$grpName}},{ssName=>$system, pName=>$pName,pCode=>$pCode};
    }
    $sth->finish;

    my @retval;
    foreach my $sysId(sort keys %{$permission}){
        my $grp=[];
        my $ssName="";
        foreach my $g(keys %{$permission->{$sysId}}){
            $ssName=$permission->{$sysId}->{$g}->[0]->{'ssName'};
            push @$grp,{name=>$g,permission=>$permission->{$sysId}->{$g}};
        }
        push @retval,{
            ssName      => $ssName,
            group       =>$grp
        };
    }
    return \@retval;
}
############################################################
sub permission_getCustomPermList {
    my($dbh)=@_;
    my $permList=[];
    my $sth=$dbh->prepare("select name pName,code pCode from opl_permission where grpId=0");
    $sth->execute();
    while(my $perm=$sth->fetchrow_hashref){
        push @$permList,$perm;
    }
    return $permList;
}
############################################################
#
# function permission_getDefaultPermissionByType
#   parameter   : $catid
#   return      : default permission  
#
############################################################

sub permission_getDefaultPermission{

    my ($dbh,$params) = @_;
    my $sql = "select catid,cattype,catname,defaultPerm,allowUserEdit from opl_category";
    my @retVal;
    my $sql_cond = "";
    my @condVals=();
    if ($params->{'catid'} ne ''){
        $sql_cond .= " or " if ($sql_cond ne '');
        $sql_cond .= " catid = ? " ;
        push @condVals, $params->{'catid'};
    }
    $sql .= " where $sql_cond " if ($sql_cond ne '');
    my $sth= $dbh->prepare($sql);
    $sth->execute(@condVals);
    while( my $rec = $sth->fetchrow_hashref){
        push  @retVal, {
            catid         => $rec->{'catid'},
            cattype       => $rec->{'cattype'},
            catname       => $rec->{'catname'},
            defaultPerm   => $rec->{'defaultPerm'}, 
            allowUserEdit => $rec->{'allowUserEdit'}, 
        };
    }
    $sth->finish;
    return \@retVal;
}

sub permission_getDefaultPermissionByType{
    
    my ($dbh, $catid) = @_;
    return undef if ($catid eq '');
    my $pList = permission_getDefaultPermission($dbh, {catid=>$catid});
    if (scalar (@$pList) == 1){
        return @$pList[0];
    }
    return undef;
}

1;
