#!/usr/bin/perl

use strict;
use CGI;

use Opals::Context;
use Opals::Template qw(
    
    tmpl_read
    tmpl_write
    tmpl_rangedPageList

);

use Opals::Course qw(
    
    course_getSchoolYearList
    course_getSchoolYearInfo
    course_getList
    course_add
    course_delete
    course_update
    course_markDeleted 
    course_findById
    
);

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

my $cgi = CGI->new;
my $input = $cgi->Vars();
my $op = $input->{'op'};
my $sortField = $input->{'sortField'};
if (! $sortField){
    $sortField = 'courseId';
}
my $sortOrder   = $input->{'sortOrder'};
    ($sortOrder && $sortOrder >=1 ) || ($sortOrder = 1);

my $pRange = 5;
my $pSize = 10;
my $curPage = $input->{'pNum'};
my $offset;
    ($curPage && $curPage >= 1) ||($curPage = 1 );
    $offset = ($curPage - 1 ) * $pSize;

my ($permission, $cookieList, $template) = tmpl_read(
    {
        dbh             => $dbh,
        cgi             => $cgi,
        tmplFile        => '/txtbk/course/list.tmpl',
        reqPermission   => 'tb_course_edit',
    }
);
my $schoolYearList  = course_getSchoolYearList($dbh);
my ($curSetSchoolYear, $curSetSchoolYearId  )= (0, 0);
foreach my $y (@{$schoolYearList}){
    if ($y->{'curSchoolYear'} == 1){
        $curSetSchoolYear = $y->{'schoolYear'};
        $curSetSchoolYearId = $y->{'id'};
        last;
    }
}

($curSetSchoolYear && $curSetSchoolYear ne "" &&  $curSetSchoolYear ne "0" ) || ($curSetSchoolYear = '2011-2012');

my $schoolYear      = course_getSchoolYearInfo($dbh, $curSetSchoolYear);
#my $curSchoolYearId = $input->{'curSchoolYearId'} || $curSetSchoolYearId;

my $curSchoolYearId;
    if ($input->{'curSchoolYearId'} && $input->{'curSchoolYearId'} >= 0 ){
        $curSchoolYearId = $input->{'curSchoolYearId'};
    }
    elsif ($input->{'curSchoolYearId'} == 0){
         $curSchoolYearId = 0;
    }
    else {
        $curSchoolYearId = $curSetSchoolYearId;
    }


if ($op eq 'add' ){
    
    my $cCode       = $input->{'cCode'};
    my $cName       = $input->{'cName'};
    my $cDescr      = $input->{'cDescr'};
    my $cGrade      = $input->{'cGrade'};
    my $cSchoolYear = $input->{'cSchoolYear'};

    my $params = {
            courseCode  => $cCode,
            courseName  => $cName,
            descriptions=> $cDescr,
            grade       => $cGrade,
            schoolYear  => $cSchoolYear,
        };
    if ( course_add($dbh, $params))
        {
            $template->param(success => 1);
        }
    else{
             $template->param(error => 1);
        }
}
elsif ($op eq 'delete') {
    my $courseId = $input->{'courseId'};
    course_delete($dbh, $courseId);

}
elsif ($op eq 'edit'){

    my $courseId = $input->{'courseId'};
    my $courseInfo = course_findById($dbh, $courseId);
    $template->param(
        edit   => 1,
        courseId        => $courseInfo->{'courseId'},
        courseCode      => $courseInfo->{'courseCode'},
        courseName      => $courseInfo->{'courseName'},
        courseDescr     => $courseInfo->{'descriptions'},
        courseGrade     => $courseInfo->{'grade'},
        courseSchoolYear=> $courseInfo->{'schoolYear'},
    ); 
}
elsif ($op eq 'update'){
    my $cId = $input->{'courseId'};
    my $cCode       = $input->{'cCode'};
    my $cName       = $input->{'cName'};
    my $cDescr      = $input->{'cDescr'}? $input->{'cDescr'}: " ";
    my $cGrade      = $input->{'cGrade'}? $input->{'cGrade'}: " ";
    my $cSchoolYear = $input->{'cSchoolYear'};
    my $params = {
            courseId    => $cId,
            courseCode  => $cCode,
            courseName  => $cName,
            descriptions=> $cDescr,
            grade       => $cGrade,
            schoolYear  => $cSchoolYear,
        };
        course_update($dbh, $params);
}
elsif ($op eq 'markDeleted'){
    my $cId         = $input->{'courseId'};
    my $cCode       = $input->{'cCode'};
    my $cName       = $input->{'cName'};
    my $cDescr      = $input->{'cDescr'}? $input->{'cDescr'}: " ";
    my $cGrade      = $input->{'cGrade'}? $input->{'cGrade'}: " ";
    my $cSchoolYear = $input->{'cSchoolYear'};
    my $params = {
            courseId    => $cId,
            courseCode  => $cCode,
            courseName  => $cName,
            descriptions=> $cDescr,
            grade       => $cGrade,
            schoolYear  => $cSchoolYear,
        };
        course_markDeleted($dbh, $params);
}

my ($resultSize,$courseList)      = course_getList($dbh, $offset, $pSize, $sortField,$sortOrder, $curSchoolYearId );
my $result = ($resultSize > 0)? 1:0;
if ($resultSize - $offset + 1 <= 0){
    my $availRange = $resultSize % $pSize;
    $availRange = $pSize if ($availRange == 0); 
    $offset = $resultSize - $availRange + 1;
    $curPage = ($offset - 1) / $pSize + 1;
}
my @rangedPageList = tmpl_rangedPageList($resultSize, $curPage, $pSize, $pRange);

foreach my $schoolYear (@{$schoolYearList}){
    if ($schoolYear->{'id'} == $curSchoolYearId ){
        $schoolYear->{'sel'} = 1;
    }
}

my $i = 0;
foreach my $course (@{$courseList}){
    $course->{'i'} = $i;
    if ($op eq 'edit'){
        if ($course->{'courseId'} == $input->{'courseId'}){
            $course->{'curEdit'} = 1;
        }
    }
    $i++;
}
$template->param(
    schoolYearList      =>  $schoolYearList,
    curSchoolYearId     =>  $curSchoolYearId eq "" ? 0:$curSchoolYearId ,
    courseList          =>  $courseList,
    op                  =>  $op eq 'edit' ? $op : 'list',
    pNum                =>  $curPage,
    resultSize          =>  $resultSize,
    result              =>  $result,
    rec_start           =>  $offset + 1 ,
    rec_end             =>  $offset + scalar(@{$courseList}) ,
    rangedPageList      =>  \@rangedPageList,
    sortOrder           =>  $sortOrder,
    sortField           =>  $sortField, 
    sortOrderReverse    => ($sortOrder && $sortOrder == 1)  ? 2 : 1,
    sortDown            => ($sortOrder && $sortOrder == 1)  ? 1 : 0,
    sortCourseName      => ($sortField eq 'courseName') ? 1 :0,
    sortCourseCode      => ($sortField eq 'courseCode') ? 1 :0,
    sortCourseDescription  => ($sortField eq 'descriptions') ? 1 :0,
    sortCourseGrade     => ($sortField eq 'grade') ? 1 :0,
);

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