#!/usr/bin/perl

#use utf8;
use strict;
use CGI;
use POSIX qw(
    ceil
);

use Opals::Context;
use Date::Calc qw(Day_of_Week Week_Number Day_of_Year);

use Opals::User qw(
    user_currentUser
);
use Opals::MarcXml qw(
    mxml_delete
);
use Opals::Date qw(
    date_parse
    date_today
    date_text
    date_f005
);
use Opals::Template qw(
    tmpl_read
    tmpl_write
    tmpl_rangedPageList
);

use Textbook::Search qw(
    search_student
    search_teacher
    search_course
    search_homeroom
);

use Textbook::Books qw(
    bookList_forCourse
    bookList_forTeacher
    bookList_forStudent
    bookList_forHomeroom
    book_TotalAvailable
);

use Textbook::Students qw(
    student_getListByCourse
    student_getListByHomeroom
    student_getListByTeacher
    student_add
    student_update
    student_delete
    student_find
);

use Textbook::Teachers qw(
    teacher_getListByCourse

    teacher_add
    teacher_update
    teacher_delete
    teacher_find
    teacher_findById
);
use Textbook::SchoolYear qw(
    schoolyear_getCurrent
    schoolyear_add
    schoolyear_delete
    schoolyear_update
    schoolyear_list
);
use Textbook::Preparation qw(
    prepare_student
    prepare_teacher
    prepare_course
    prepare_homeroom
    getPreparation_teacher
    getPreparation_student

);

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

my $cgi = CGI->new;
my $input = $cgi->Vars();
my ($permission, $cookie, $template) = tmpl_read(
        {
            dbh             => $dbh,
            cgi             => $cgi,
            tmplFile        => 'textbook/preparation.tmpl',
            reqPermission   => 'report', #textbook
        }
);

my $preparationType= $input->{'preparationType'};
    
my ($errCode, $myCookie, $user) = user_currentUser($dbh, $cgi);
my $uid = $user->{'uid'};
my $pId=0;

    if($preparationType eq "teachers"){
        my $teacherId  = $input->{'teacherId'};
        my $expectedDate  = $input->{'expectedDate'};
        $pId = savePreparation_teacher($dbh,$uid,$teacherId,$preparationType,$expectedDate );
        $template->param(teachers => 1);
    }
    elsif ($preparationType eq "students"){
        my $studentId = $input->{'studentId'};
        my $expectedDate = $input->{'expectedDate'};
        $pId = savePreparation_student($dbh,$uid,$studentId,$preparationType,$expectedDate );
        $template->param(students => 1);
    }
    elsif ($preparationType eq "courses"){
        my $courseId        = $input->{'courseId'};
        my $expectedDate    = $input->{'expectedDate'};
        $pId = savePreparation_course($dbh, $uid, $courseId, $preparationType,$expectedDate);
        $template->param(courses => 1);
    }
    elsif ($preparationType eq "homeroom"){
        
        my $homeroomVal     = $input->{'homeroomVal'};

        my $expectedDate    = $input->{'expectedDate'};
        $pId    = savePreparation_homeroom($dbh, $uid, $homeroomVal, $preparationType,$expectedDate);
        $template->param(homeroom => 1);

    }

$template->param(preparationType => $preparationType,);

if($pId){
    $template->param(pId => $pId);
}



################################################################################
sub savePreparation_teacher{
    my ($dbh,$uid,$teacherId,$preparationType,$expectedDate) = @_;

    my $params={preparedBy=>$uid,schoolYearId=>1,expectedReadiness=>$expectedDate};
    my @book2Prepare=();
  

    my ($i,$j,$k)=(0,0,0);
    my $prepareId=0;
    my ($section,$courseId,$nStudents,$aType,$aTypeInDB,$qty,$recipient,$isbn);
    
    while($section=$input->{'section_' . $i}){
       if($input->{'course_' . $i}){
            $courseId =$input->{'courseId_' . $i };
            $nStudents  =$input->{'nStudents_' . $i};
            
            $j=0;
            while($isbn =$input->{'ISBN_' . $i . '_' .$j}){
                $aType       = $input->{'aType_' . $i . '_' .$j};
                $qty         = $input->{'qty_' . $i . '_' .$j};
                $recipient   = $input->{'recipient_' . $i . '_' .$j};
                
                if($aType eq "cps"){
                        $aTypeInDB ="perStudent";
                }
                elsif($aType eq "cpc"){
                    $aTypeInDB ="perClass";
                }
                else {
                    $aTypeInDB ="perSection";
                }

                push  @book2Prepare,{teacherId=>$teacherId,courseId=>$courseId,
                                     sectionId=>$section,nStudents=>$nStudents,
                                     nCopiesPerAllocation=>$qty,ISBN=>$isbn,
                                     allocationType=>$aTypeInDB,recipient=>$recipient};
            
                $j++;
            }

        }
        $i++;
    
    }
    $params->{'book2Prepare'}=\@book2Prepare;
    $prepareId = prepare_teacher($dbh,$params);
                         
    return  $prepareId;
}

################################################################################
  
sub savePreparation_student{

    my ($dbh,$uid,$studentId,$preparationType,$expectedDate) = @_;
    my $params={preparedBy=>$uid,schoolYearId=>1,expectedReadiness=>$expectedDate};
    my @book2Prepare=();
    my ($i,$j,$k)=(0,0,0);
    my $prepareId=0;
    my ($courseCode,$courseId,$sectionId,$qty,$isbn);
    while($courseCode=$input->{'courseCode_' . $i}){
        $j = 0;
        if($input->{'ISBN_' . $i . '_' . $j}){
            $sectionId  =   $input->{'sectionId_' . $i };
            $courseId   =   $input->{'courseId_' . $i };
            while($isbn =$input->{'ISBN_' . $i . '_' .$j}){
                $qty        = $input->{'qty_' . $i . '_' .$j};
                push  @book2Prepare,{   studentId=>$studentId,
                                        courseId=>$courseId,
                                        sectionId=>$sectionId,
                                        ISBN=>$isbn,
                                        nCopies=>$qty
                                     };
                $j++;
            }
        }
        $i++;
    }
    $params->{'book2Prepare'}=\@book2Prepare;
    $prepareId = prepare_student($dbh,$params);
    return  $prepareId;
}

sub savePreparation_course{
    my ($dbh, $uid, $courseId,$preparatonType,$expectedDate) = @_;
    my $params={preparedBy=>$uid,schoolYearId=>1,expectedReadiness=>$expectedDate};    
    my @book2Prepare=();
    my $prepareId=0;
    my ($section, $nStudents, $aType, $aTypeInDB, $qty,$recipient,$isbn);
    my ($i,$j,$k)=(0,0,0);

    #$courseId = $input->{'courseId'};


    while($section=$input->{'section_' . $i}){
        $nStudents  = $input->{'nStudents_' . $i};
        $j = 0;
        while($isbn = $input->{'ISBN_' . $i . '_' . $j}){
            $aType      = $input->{'aType_' .$i . '_' . $j};
            $qty        = $input->{'qty_' . $i . '_' . $j};
            $recipient  = $input->{'recipient_' . $i . '_' . $j};
            if($aType eq "cps"){
                $aTypeInDB ="perStudent";
            }
            else {
                $aTypeInDB ="perSection";
            }
            
           push @book2Prepare, {
                courseId    => $courseId,
                sectionId   => $section,
                ISBN        => $isbn,
                nStudents   => $nStudents,
                allocationType  => $aTypeInDB,
                nCopiesPerAllocation => $qty,
                recipient   => $recipient};
            $j++;
           }
        $i++;
        }
    $params->{'book2Prepare'}=\@book2Prepare;
    $prepareId = prepare_course($dbh,$params);
    
    return $prepareId;
    }
sub savePreparation_homeroom{
    
    my ($dbh,$uid,$homeroomVal,$preparationType,$expectedDate) = @_;
    my $params={preparedBy=>$uid,schoolYearId=>1,expectedReadiness=>$expectedDate};
    my @book2Prepare=();

    my ($i,$j,$k)=(0,0,0);
    my $prepareId=0;
    my ($section,$courseId,$nStudents,$aType,$aTypeInDB,$qty,$recipient,$isbn);

  
    while($section=$input->{'section_' . $i}){
       if($input->{'course_' . $i}){
            $courseId =$input->{'courseId_' . $i };
            $nStudents  =$input->{'nStudents_' . $i};
            
            $j=0;
            while($isbn =$input->{'ISBN_' . $i . '_' .$j}){
                $aType       = $input->{'aType_' . $i . '_' .$j};
                $qty         = $input->{'qty_' . $i . '_' .$j};
                $recipient   = $input->{'recipient_' . $i . '_' .$j};
                
                if($aType eq "cps"){
                        $aTypeInDB ="perStudent";
                }
                elsif($aType eq "cpc"){
                    $aTypeInDB ="perClass";
                }
                else {
                    $aTypeInDB ="perSection";
                }

                push  @book2Prepare,{homeroom=>$homeroomVal,courseId=>$courseId,
                                     sectionId=>$section,nStudents=>$nStudents,
                                     nCopiesPerAllocation=>$qty,ISBN=>$isbn,
                                     allocationType=>$aTypeInDB,recipient=>$recipient};
                $j++;
            }
        }
        $i++;
    }

    $params->{'book2Prepare'}=\@book2Prepare;
    print debug "start\n";
    $prepareId = prepare_homeroom($dbh,$params);
    print debug "$prepareId";                         
    return  $prepareId;
}

################################################################################

tmpl_write($dbh, $cgi, $cookie, $template);

