#!/usr/bin/perl

#use utf8;
use strict;
use CGI;
use JSON;

use Opals::Context;
use Opals::Template qw(
    tmpl_preference
);
use Opals::Locale qw(
    loc_getMsgFile
    loc_write
);
use Opals::User qw(
    user_LoadCategory
    user_category
    user_currentUser
    user_permission

    user_getHR_Grade_TeacherList
);
use Opals::Permission qw(
    permission_getList
    permission_getCustomPermList
);
use Time::localtime;


my $dbh = Opals::Context->dbh();
END { $dbh->disconnect(); }

my $cgi = CGI->new;
my $textbookMgmnt = Opals::Context->preference('textbookMgmnt');
my $equipmentMgmnt= Opals::Context->preference('equipmentMgmnt');
my $defCategory= Opals::Context->preference('defCategory');
my $pref = tmpl_preference($dbh);

my $libType = $pref->{'libraryType'} || 'k-12';

my $searchFieldList ={"public" =>[{'val'=>'name'            ,'name'=>'Name'         ,'searchable'=>'true'   ,'sortable'=>'false'},
                                  {'val'=>'userbarcode'     ,'name'=>'Userbarcode'  ,'searchable'=>'true'   ,'sortable'=>'true'},
                                  {'val'=>'username'        ,'name'=>'Login name'   ,'searchable'=>'true'   ,'sortable'=>'false'},
                                  {'val'=>'firstname'       ,'name'=>'First name'   ,'searchable'=>'false'  ,'sortable'=>'true'},
                                  {'val'=>'lastname'        ,'name'=>'Last name'    ,'searchable'=>'false'  ,'sortable'=>'true'},
                                  {'val'=>'phone'           ,'name'=>'Phone number' ,'searchable'=>'true'   ,'sortable'=>'false'},
                                  {'val'=>'created'         ,'name'=>'Created date'  ,'searchable'=>'false'  ,'sortable'=>'true'}
                                 ],

                       "k-12"  =>[{'val'=>'name'            ,'name'=>'Name',        ,'searchable'=>'true'   ,'sortable'=>'false'},
                                  {'val'=>'firstname'       ,'name'=>'First name'   ,'searchable'=>'false'  ,'sortable'=>'true'},
                                  {'val'=>'lastname'        ,'name'=>'Last name'    ,'searchable'=>'false'  ,'sortable'=>'true'},
                                  {'val'=>'username'        ,'name'=>'Login name'   ,'searchable'=>'true'   ,'sortable'=>'false'},
                                  {'val'=>'userbarcode'     ,'name'=>'Userbarcode'  ,'searchable'=>'true'   ,'sortable'=>'true'},
                                  {'val'=>'homeroom'        ,'name'=>'Homeroom'     ,'searchable'=>'true'   ,'sortable'=>'true'},
                                  {'val'=>'buildingcode'    ,'name'=>'BuildingCode' ,'searchable'=>'true'   ,'sortable'=>'true'},
                                  {'val'=>'teacher'         ,'name'=>'Teacher'      ,'searchable'=>'true'   ,'sortable'=>'true'},
                                  {'val'=>'grade'           ,'name'=>'Grade'        ,'searchable'=>'true'   ,'sortable'=>'true'},
                                  {'val'=>'yeargraduation'  ,'name'=>'Graduation'   ,'searchable'=>'true'   ,'sortable'=>'true'},
                                  {'val'=>'created'        ,'name'=>'Created date'  ,'searchable'=>'false'  ,'sortable'=>'true'}
                       ],
                       "academy"=>[
                                  {'val'=>'name'            ,'name'=>'Name'         ,'searchable'=>'true' ,'sortable'=>'false'},
                                  {'val'=>'firstname'       ,'name'=>'First name'   ,'searchable'=>'false'  ,'sortable'=>'true'},
                                  {'val'=>'lastname'        ,'name'=>'Last name'    ,'searchable'=>'false'  ,'sortable'=>'true'},
                                  {'val'=>'username'        ,'name'=>'Login name'   ,'searchable'=>'true'   ,'sortable'=>'false'},
                                  {'val'=>'userbarcode'     ,'name'=>'Userbarcode'  ,'searchable'=>'true'   ,'sortable'=>'true'},
                                  {'val'=>'yeargraduation'  ,'name'=>'Graduation'   ,'searchable'=>'true'   ,'sortable'=>'true'},
                                  {'val'=>'created'        ,'name'=>'Created date'  ,'searchable'=>'false'  ,'sortable'=>'true'}
                       ]
                };


#---------------------------------------------------------------------------------------------------
    my $permList=permission_getList($dbh);
    my $pCustomList     = permission_getCustomPermList($dbh);
    my ($errCode, $cookie_session, $user) = user_currentUser($dbh, $cgi);
    my $permission = user_permission($dbh, $user->{'uid'});
    foreach my $e(@$permList){
        foreach my $g(@{$e->{'group'}}){
            my $plist=[];
            foreach my $p(@{$g->{'permission'}}){
                if($permission->{$p->{'pCode'}}){
                    push @$plist,$p;
                }
            }
            #$g->{'permission'}=$plist;
        }
    }
    
#---------------------------------------------------------------------------------------------------
    my $catList=getUserCatList($dbh);
    my $userImportList=getUserImportId($dbh);

#---------------------------------------------------------------------------------------------------
    my $teacherList  = user_getHR_Grade_TeacherList($dbh,'teacher');
    my $gradeList    = user_getHR_Grade_TeacherList($dbh,'grade');
    my $homeroomList = user_getHR_Grade_TeacherList($dbh,'homeroom');
    my $buildingcodeList = user_getHR_Grade_TeacherList($dbh,'buildingcode');
    my $gradYearList = user_getHR_Grade_TeacherList($dbh,'yeargraduation');
#---------------------------------------------------------------------------------------------------

    my $userParamAuthoriry={
         importlist =>$userImportList,
         libType    =>$libType,    
         defCategory=>$defCategory,
         searchFieldList     =>$searchFieldList->{$libType},                       
         pref_lang=>[{'val'=>'en','name'=>'English'},
                    {'val'=>'fr','name'=>'French'},
                    {'val'=>'pt','name'=>'Portuguese'},
                    {'val'=>'es','name'=>'Spanish'},
                    {'val'=>'ar','name'=>'Arabic'},

                    {'val'=>'ru','name'=>'Russian'}],
         contPrefList=>[{'val'=>'phone','name'=>'Phone'},
                    {'val'=>'email','name'=>'Email'},
                    {'val'=>'mail','name'=>'Mail'}],           
         title=>[{'val'=>'Mr.','name'=>'Mr.'},
                 {'val'=>'Ms.','name'=>'Ms.'},
                 {'val'=>'Mrs.','name'=>'Mrs.'},
                 {'val'=>'Dr.','name'=>'Dr.'},
                 {'val'=>'Prof.','name'=>'Prof.'}],
         gender=>[{'val'=>'0','name'=>'Female'},
                  {'val'=>'1','name'=>'Male'}],
         categorycode      => $catList,
         permissionGrpList =>$permList,
         pCustomList =>$pCustomList,
         identificationType=>[{'name'=>'passport'},
                              {'name'=>'Driver\'s licence'}],
         relationType=>[
                        {'val'=>'Child','name'=>'Child'},
                        {'val'=>'Wife','name'=>'Wife'},
                        {'val'=>'Husband','name'=>'Husband'},
                        {'val'=>'Father','name'=>'Father'},
                        {'val'=>'Mother','name'=>'Mother'},
                        {'val'=>'Sibling','name'=>'Sibling'},
                        {'val'=>'Cousin','name'=>'Cousin'},
                        {'val'=>'Aunt/Uncle','name'=>'Aunt/Uncle'},
                        {'val'=>'Niece/Nephew','name'=>'Niece/Nephew'}],                     
         contactType =>[{'val'=>'Guardian','name'=>'Guardian'},
                        {'val'=>'Wife','name'=>'Wife'},
                        {'val'=>'Husband','name'=>'Husband'},
                        {'val'=>'Father','name'=>'Father'},
                        {'val'=>'socialworker','name'=>'Social worker'},
                        {'val'=>'caregiver','name'=>'Caregiver'},
                        {'val'=>'Mother','name'=>'Mother'}],
         status=>[
                  {'val'=>'1','name'=>'Active'},
                  {'val'=>'2','name'=>'Blocked'},
                  {'val'=>'0','name'=>'Inactive'}],               
         studies=>[{'val'=>'Day','name'=>'Day'},
                   {'val'=>'ContEd','name'=>'Continuing education'},
                   {'val'=>'Attestation','name'=>'Attestation'}],               
         permanent=>[{'val'=>'true','name'=>'true'},
                     {'val'=>'false','name'=>'false'}],               
         fulltime =>[{'val'=>'true','name'=>'true'},
                     {'val'=>'false','name'=>'false'}],               
         teacherList  =>  $teacherList,                               
         gradeList    =>  $gradeList,                               
         homeroomList =>  $homeroomList,
         buildingcodeList=>$buildingcodeList,
         yeargraduationList =>  $gradYearList                               
         
         };
    
               

    #my $json = to_json($userParamAuthoriry, {utf8 => 1, pretty => 1})  ;
    my $json = to_json($userParamAuthoriry, { pretty => 1})  ;
    print "Content-type: text/plain\n\n";

   print   $json;
#---------------------------------------------------------------------------------------------------
sub getUserCatList_{
    my($dbh)=@_;
    my $sth=$dbh->prepare("select catid val ,catname name,defaultPerm from opl_category order by catname");
    $sth->execute();
    my @catList=();
    while(my $rec=$sth->fetchrow_hashref){
        push @catList,$rec
     }
     return \@catList;

}

#---------------------------------------------------------------------------------------------------
sub getUserCatList{
    my($dbh)=@_;
    my ($errCode, $ck, $user) = Opals::User::user_currentUser($dbh, $cgi);
    my $sql="select  catid val ,catname name,defaultPerm,allowUserEdit from opl_category";
    if($user->{'catid'}>0){
            my ($catList)=$dbh->selectrow_array("select  allowUserEdit from opl_category where catid =" . $user->{'catid'} );
            $catList=-1 if(!defined $catList || $catList eq '');
            if($catList ne '0'){
                $sql .= " where catid in($catList)";
            }

    }
    $sql .= " order by catname";
    my $sth=$dbh->prepare($sql);
    $sth->execute();
    my @catList=();
    while(my $rec=$sth->fetchrow_hashref){
        push @catList,$rec
     }
    return \@catList;

}

#---------------------------------------------------------------------------------------------------
sub getUserImportId{
   my($dbh )=@_;
   my @importlist = ({val => -1,  name => 'Any' }, 
                     {val => 0 , name => 'Add manually'});

   my $sth=$dbh->prepare("select i.idimport val , concat(t.firstname,' ', t.lastname,' --  ', IF(STRCMP(i.dateImport,''),  i.dateImport,'')) name  
                          from opl_userimport  i left outer join opl_user u using(idimport)                            
                          inner join opl_user t on t.uid=i.uid where u.uid is not null                            
                          group by val order by dateImport desc,name");
   $sth->execute();
   while ( my $rec = $sth->fetchrow_hashref ){
        push @importlist, $rec;
    }
    #if ( scalar(@importlist) == 2 ) { @importlist = (); }

    return \@importlist;
}
