#!/usr/bin/perl -w
use strict;
use Text::CSV_XS;

my $csv = Text::CSV_XS->new ();
my $io;
open ($io, $ARGV[0]) || die $!;
my $defaultDt = $ARGV[0];
$defaultDt =~ s/.txt//;
$defaultDt =~ s/_DE//;
$defaultDt =~ s/_//g;
$defaultDt = "\l$defaultDt";
my $colref = $csv->getline($io) || die $!;
$csv->column_names (@$colref);
my $lineNo = 1;

LINE:
while (my $hr = $csv->getline_hr($io)) {
    $lineNo++;
    my $subject = undef;
    foreach my $col (keys %$hr) {
	if ($col =~ m{(.*?)(ID|DE)$}) {
	    my $prefix = $1;
	    my $dt = "\l$prefix" || $defaultDt;
	    if ($hr->{$col} eq '0' && $1 eq '') {
		print STDERR "$ARGV[0]:$lineNo: incomplete record:",join(', ', map {"$_ => $hr->{$_}"} keys %$hr),"\n";
		next LINE;
	    } elsif (defined $subject) {
		if ($dt eq 'item') {
		    $dt = "item\u$defaultDt";
		    $prefix = "\u$defaultDt";
		}
		$hr->{$prefix} = "$dt:$hr->{$col}";
		delete $hr->{$col};
	    } else {
		$subject = "$dt:$hr->{$col}";
		delete $hr->{$col};
	    }
	} elsif ($hr->{$col} eq '' || $hr->{$col} eq '0') {
	    delete $hr->{$col};
	} elsif ($hr->{$col} =~ m{^(\d+)/(\d+)/(\d+) (\d+):(\d+):(\d+)}) {
	    $hr->{$col} = sprintf("\"%04d-%02d-%02dT%02d:%02d:%02d\"^^xsd:dateTime", $3, $1, $2, $4, $5, $6);
	} elsif ($col =~ m{(.+)FLAG$}) {
	    my $p = $1;
	    my $v = $hr->{$col} eq 'Y' ? 'true' : $hr->{$col} eq 'N' ? 'false' : '\"what is a \\\"$col\\\" of \\\"$hr->{$col}\\\"?\"';
	    delete $hr->{$col};
	    $hr->{$p} = $v;
	} elsif ($hr->{$col} =~ m{^\d+$}) {
	} else {
	    $hr->{$col} = "\"$hr->{$col}\"";
	}
    }
    print "$subject ", join(' ; ', map {":p$_ $hr->{$_}"} keys %$hr), " .\n";
}

