#!/usr/bin/perl -w

BEGIN {
    if (!$ENV{'PERL5LIB'} || !$ENV{'OPALS_CONF'}) {
        print_help();
        exit 1;
    }
}

#use Getopt::Std;
#
#my %options = ();
#getopts("c:",\%options);
#my $configFile = $options{c};

use Opals::Context;
use Opals::Equipment qw(
     eq_record_findByRId
     eq_item_findByRId
);

use strict;
my $dbh = Opals::Context->dbh();;


open  my $file, '>/tmp/data.csv';

my $header = getHeader($dbh);

foreach my $h (@$header){
    print $file $h->{'name'}, ",";
}
print $file "\n";
my $ridList = getRidList($dbh);


foreach my $rid (@$ridList) {
    my $recordInfo = eq_record_findByRId($dbh, {recordId=>$rid});
    my $itemInfo =  eq_item_findByRId($dbh, $rid);
    my $hRec = {};
    foreach my $i (@$itemInfo){
        foreach my $r (@$recordInfo){
            if (!$hRec->{'eqName'}){
                $hRec->{'eqName'} = $r->{'rname'};
                $hRec->{'rid'} = $rid;
            }
            $hRec->{$r->{'fId'}} = $r->{'fValue'};
        }
        $hRec->{'barcode'} = ($i->{'barcode'})? $i->{'barcode'} : "";
        $hRec->{'iType'} = ($i->{'typeId'}) ? $i->{'typeId'}: "";
        foreach my $f (@{$i->{'fields'}}){
            $hRec->{$f->{'sfid'}} = $f->{'sfval'};
        }
        printData($file, $header, $hRec);
        $hRec->{0} = "";
    }
}
close ($file);

=item
foreach my $h (@$header){
    print $h->{'name'}, "," ;
}
    print "\n";
foreach my $h (@$header){
    my $k = $h->{'id'};
    if ($hRec->{$k} ){
        print $hRec->{$k}, ",";
    }
    else{
        print ",";
    }
}
=cut
print "\n";
END {
    if ($dbh) {
        $dbh->disconnect();
    }
}

$| = 1;
# Codes start...


# Codes end.

exit 0;
################################################################################
sub printData {
    my ($f, $header, $data) = @_;
    foreach my $h (@$header){
        my $k = $h->{'id'};
        if ($data->{$k} ){
            $data->{$k} =~ s/"/\\"/g;
            print $f '"' , $data->{$k},  '",';
        }
        else{
            print $f '"",';
        }
    }
    print $f "\n";
}

sub getRidList {
    my ($dbh) = @_;
    my $sql = " select distinct r.rid from eq_records r inner join eq_items i on r.rid = i.rid && i.available = 1 order by r.rid";
    my $sth = $dbh->prepare($sql);
    $sth->execute();
    my @rids;
    while ( my $rid = $sth->fetchrow_array){
        push @rids, $rid;
    }
    $sth->finish;
    return \@rids;


}


sub getHeader {
    my ($dbh) = @_;
    my $sql = " select name , id from eq_def where defType = 'record' order by id";
    my $sth = $dbh->prepare($sql);
    $sth->execute();
    my @header = ();
    push @header, {
        id  => 'rid', 
        name => 'RID'
    };
    push @header, {
        id  => 'eqName', 
        name => 'Equipment Name'
    };

    while ( my $def = $sth->fetchrow_hashref){
         push @header, {
             id     => $def->{'id'},
             name   => $def->{'name'}
         };
    }
    $sql = " select name , id from eq_def where defType = 'item' order by id";
    $sth = $dbh->prepare($sql);
    $sth->execute();
    push @header, {
        id  => 'barcode', 
        name => 'Barcode'
    };
    push @header, {
        id  => 'iType', 
        name => 'Item Type'
    };

    while ( my $def = $sth->fetchrow_hashref){
         push @header, {
             id     => $def->{'id'},
             name   => $def->{'name'}
         };
    }
    $sth->finish;
    return \@header;
}





sub print_help {
    print <<_STR_;
NAME:
    .
SYNOPSIS:
    PERL5LIB=/www/opals/module OPALS_CONF=/etc/opals/conf/\$SITECODE \\
        $0 [param1] [param2] [...]
DESCRIPTION:
    -param1  description 1...
_STR_
}
############################################################
