#!/usr/bin/perl

use strict;
use CGI;

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

use Opals::Equipment qw(

    eq_defRecord_getList
    eq_defRecord_getLists
    eq_defItem_getList
    eq_defItem_getLists
    eq_def_addUpdate
    eq_def_delete
    
    eq_record_deleteByFid
    eq_item_deleteByFid
    eq_dataType_getList
);

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

my $cgi = CGI->new;
my $input = $cgi->Vars();
my ($permission, $cookieList, $template) = tmpl_read(
    {
        dbh             => $dbh,
        cgi             => $cgi,
        tmplFile        => 'eqmnt/eqDef.tmpl',
        reqPermission   => 'eq_record_edit',
    }
);

my @rList = ($cgi->param('recDef'));
my @iList = ($cgi->param('itemDef'));
my ($defType, $fid, $fname, $fdesc, $f, $d, $disp, $ftype);
my ( $fOrder , $chkbF, $chkbD , $i) = ( 0,0,0,0 );
my @delDefRecId =();
my @delDefItemId = ();

my $save = $input->{'save'};

if ($save eq "save") {
    #save record definition
    $fOrder = 0;
    my $curDefRecList = eq_defRecord_getList($dbh);
    foreach my $r (@$curDefRecList){
        push @delDefRecId,$r->{'id'};
    }
    foreach my $rec (@rList) {
        $defType = 'record';
        $chkbF = 0;
        $chkbD = 0;
        $disp = 0;
        $ftype = 0;
        $f = 0;
        $i++;
        $fOrder++;
       if ($rec =~ m/([^\t]+)\t([^\t]+)\t([^\t]+)\t([^\t]+)\t([^\t]+)\t([^\n\r]+)/) {
            $fid    = $1;
            $fname  = $2;
            $fdesc  = $3;
            $d      = $4;
            $disp   = $5;
            $ftype  = $6;
            $d = ($d eq "true")?1:0;
            $disp = ($disp eq "true")?1:0;
            @delDefRecId = grep { $_ != $fid } @delDefRecId; #remove if it's in the delRId list
            my $params = 
                {fId=>$fid,defType=>$defType,fOrder=>$fOrder,name=>$fname,description=>$fdesc,reqD=>$d, display=>$disp,fieldType=>$ftype};
            eq_def_addUpdate($dbh,$params);
        }
    }
    foreach my $d (@delDefRecId){
        eq_def_delete($dbh,$d,$defType);
        eq_record_deleteByFid($dbh,$d)
    }

    #save item definition
    $fOrder = 0;
    my $curDefItemList = eq_defItem_getList($dbh);

    foreach my $i (@$curDefItemList){
        push @delDefItemId, $i->{'id'};
    }

    foreach my $itm(@iList){
        $defType = 'item';
        $chkbF = 0;
        $chkbD = 0;
        $i++;
        $fOrder++;
        if ($itm =~ m/([^\t]+)\t([^\t]+)\t([^\t]+)\t([^\t]+)\t([^\t]+)\t([^\n\r]+)/) {
            $fid    = $1;
            $fname  = $2;
            $fdesc  = $3;
            $d      = $4;
            $disp   = $5; 
            $ftype  = $6;
            $d = ($d eq "true")?1:0;
            $disp = ($disp eq "true")?1:0;
            @delDefItemId = grep { $_ != $fid } @delDefItemId; #remove if it's in the delIId list
            my $params = 
                {fId=>$fid,defType=>$defType,fOrder=>$fOrder,name=>$fname,description=>$fdesc,reqD=>$d,display=>$disp,fieldType=>$ftype};
            eq_def_addUpdate($dbh,$params);
        }
    }
    foreach my $d (@delDefItemId){
        eq_def_delete($dbh,$d,$defType);
        eq_item_deleteByFid($dbh,$d);
    }
}

my $defRecordLists   = eq_defRecord_getLists($dbh);
my $defItemLists    = eq_defItem_getLists($dbh);
my $dataTypeList    = eq_dataType_getList($dbh);
$template->param(
                defRecordLists  => $defRecordLists,
                defItemLists    => $defItemLists,
                dataTypeList    => $dataTypeList,
                equipment_eqDef => 1,
                );

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

