#!/usr/bin/perl

use DBI;
use Data::Dumper;
use Sys::Syslog;

my $config={};
my $db;
my $identifier = 'cdr-csv-importer';

sub parse_config {
    open(CONFIG, "<cdr-csv-importer.ini") or die("Can't open config file (cdr-csv-importer.ini)\n");
    while (<CONFIG>) {
	#print $_;
        chomp; #kill whitespaces
        
        next if !(m/^[[:alnum:]]/); #skip lines that don't start right
        next if m/^\s*$/; #skip lines with only whitespace
	next if m/^;/;    #skip ini comments
        next if m(/^\[.*\]/); # skip the start of a section
	
	my ($key, $val) = split(/\s+=\s+/, $_, 2);
	#print "'$key' = '$val'\n";
	if($key eq "fields") {
	    @{$config->{fields}} = split(/,/, $val);
	} else {
	    $config->{$key} = $val;    
	}
    }
    close(CONFIG);
}

sub create_table {
#    my $db = shift;
    my $sql = "CREATE TABLE IF NOT EXISTS `$config->{table}` (
  `id` int(11) NOT NULL auto_increment,
  `caller_id_name` varchar(255) NOT NULL default '',
  `caller_id_number` varchar(255) NOT NULL default '',
  `destination_number` varchar(255) NOT NULL default '',
  `context` varchar(255) NOT NULL default '',
  `start_stamp` varchar(255) NOT NULL default '',
  `answer_stamp` varchar(255) NOT NULL default '',
  `end_stamp` varchar(255) NOT NULL default '',
  `duration` varchar(255) NOT NULL default '',
  `billsec` varchar(255) NOT NULL default '',
  `hangup_cause` varchar(255) NOT NULL default '',
  `uuid` varchar(255) NOT NULL default '',
  `bleg_uuid` varchar(255) NOT NULL default '',
  `accountcode` varchar(255) NOT NULL default '',
  `read_codec` varchar(255) NOT NULL default '',
  `write_codec` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `uuid` (`uuid`)
) ENGINE=InnoDB";
    $db->do($sql);
    if (!$db->{Executed}) {
	die("We couldn't CREATE the DB table\n");
    }
}

sub connect_db {
    return DBI->connect($config->{connect_string}, $config->{username}, $config->{password});
}

sub is_db_connected {
    $query = $db->prepare("SELECT CURRENT_TIMESTAMP;");
    $query->execute();
}

openlog($identifier, 'ndelay,pid', LOG_USER);
open(STDERR,"|logger -t \"${identifier}[$$]: \"") or die "Error: Unable to redirect STDERR to logger!";
open(STDOUT,"|logger -t \"${identifier}[$$]: \"") or die "Error: Unable to redirect STDOUT to logger!";
&parse_config;
#print Dumper $config;
open(PID, ">$config->{pid_file}");
print PID $$;
$db = &connect_db;
&create_table($db);
$field_count = @{$config->{fields}};
my $values = '?';
my $fields = $config->{fields}[0];
for ($i=1; $i<$field_count; $i++) {
    $fields = sprintf('%s, %s', $fields, $config->{fields}[$i]);
    $values = sprintf('%s, ?', $values);
}


my $query = sprintf(
    "INSERT INTO %s (%s) VALUES (%s);", 
    $config->{table}, join(',', @{$config->{fields}}), $values
    );
syslog(LOG_INFO, "$query");

sub mylog {
    $log = shift;
    syslog(LOG_INFO, "$log");
}

print Dumper @ARGV;
my $query_handle = $db->prepare($query);
while (<STDIN>) {
    syslog(LOG_INFO, $_);
    chomp;
    @values = split(/,/);
    #print Dumper @values;
    $query_handle->execute(@values);
}
