#!/usr/bin/perl
# Copyright 2008 House Internet S.R.L.
# This program is not redistributable.
# http://www.asternic.org
# Contact Nicolas Gudino for more information <nicolas@house.com.ar>
use FindBin;
use lib $FindBin::Bin;
use POSIX;
use DBI;
use Time::Local;
use Getopt::Long;
use Data::Dumper;

my %config;
my %duplicates;
my %queuecache;
my %agentcache;
my $dbh;
my $conectado = 0;
my $last_event_ts = 0;
my $agentlist;

GetOptions( "u|user=s"     => \$config{'dbuser'}, 
            "p|password=s" => \$config{'dbpass'}, 
            "h|host=s"     => \$config{'dbhost'}, 
            "d|dbname=s"   => \$config{'dbname'}, 
            "a|agent=s"    => \$agentlist,
            "help|?"       => \$help
            );


usage() if $help;

load_config('/etc/tailqueuelog.conf');
load_config("$ENV{HOME}/.tailqueuelog") if defined $ENV{HOME};

$config{'dbname'}  = $config{'dbname'}?$config{'dbname'}:"qstats";
$config{'dbhost'}  = $config{'dbhost'}?$config{'dbhost'}:"localhost";
$config{'dbpass'}  = $config{'dbpass'}?$config{'dbpass'}:"";
$config{'dbuser'}  = $config{'dbuser'}?$config{'dbuser'}:"root";
$config{'logfile'} = $config{'logfile'}?$config{'logfile'}:"/var/log/asterisk/queue_log";

sub unifyagents($agentlist) {
    my $contador=0;
    my @partes = split(/,/,$agentlist);
    $mainagent = shift(@partes);
    my $mainagent_id;

    &connect_db();
    $query = "SELECT agent_id FROM qagent WHERE agent='$mainagent'";
    $sth   = $dbh->prepare($query);
    $sth->execute;
     
    while ( my @row = $sth->fetchrow ) {
        $contador++;
        $mainagent_id = $row[0];
    }

    if($contador==0) {
        print "Could not find agent $mainagent. Exiting...\n";
        exit;
    }

    foreach(@partes) {
        $contador=0;
        $query = "SELECT agent_id FROM qagent WHERE agent='$_'";
        $sth   = $dbh->prepare($query);
        $sth->execute;
        while ( my @row = $sth->fetchrow ) {
          $contador++;
          $otheragent_id = $row[0];
        }
        if($contador>0) {
            print "I have to modify agent $_ with id $otheragent_id to agent $mainagent with id $mainagent_id\n";
            $query = "UPDATE queue_stats SET qagent=$mainagent_id WHERE qagent=$otheragent_id";
            print "$query\n";
            $sth   = $dbh->prepare($query);
            $sth->execute;

            $query = "UPDATE queue_stats_mv SET agent='$mainagent' WHERE agent='$_'";
            print "$query\n";
            $sth   = $dbh->prepare($query);
            $sth->execute;

            $query = "UPDATE agent_activity SET agent='$mainagent' WHERE agent='$_'";
            print "$query\n";
            $sth   = $dbh->prepare($query);
            $sth->execute;

            $query = "DELETE FROM qagent WHERE agent_id=$otheragent_id";
            print "$query\n";
            $sth   = $dbh->prepare($query);
            $sth->execute;

        } else {
            print "Could not find agent $_, skipping...\n";
        }
    }
}

sub load_config() {
    $file = shift;
    return unless (-r $file);
    open (CFG, "<$file") or return;
    while (<CFG>) {
        chomp;
        my ( $var, $val ) = split(/\s*\=\s*/);
        $val =~ s/'([^']*)';/$1/g;
		$var = lc($var);
        $config{$var} = $val;
    }
    close(CFG);
}

sub connect_db() {
    my $return = 0;
    my %attr   = (
        PrintError => 0,
        RaiseError => 0,
    );
    my $dsn = "DBI:mysql:database=$config{'dbname'};host=$config{'dbhost'}";
    print "Connecting to DB $dsn\n";
    $dbh->disconnect if $dbh;
    $dbh = DBI->connect( $dsn, $config{'dbuser'}, $config{'dbpass'}, \%attr ) or $return = 1;
    return $return;
}

if( $agentlist !~ /,/) {
    print "\nYou must use a comma separated list of agents, being the one to keep the first in the list, for example:\n\n./unifyagents -a \"John Doe,Agent/102,SIP/102\"\n\n";
    exit;
}

&unifyagents($agentlist);

sub usage {
    print STDERR "unifyagents [<options>] \n";
    print STDERR "       -u <name>     - Connect to mysql as username <name> [root]\n";
    print STDERR "       -p <pw>       - Connect to mysql with password <pw>\n";
    print STDERR "       -h <host>     - Connect to mysql host <host> [localhost]\n";
    print STDERR "       -d <dbname>   - Connect to mysql database <dbname> [qstats]\n\n";
    exit;
}
