#!/usr/bin/perl -w

use strict;

use DBI;

use Yandex::TimeCommon;
use Yandex::Shell;
use Pid::File::Flock qw/:auto/;

my $SHARE = 'ppc.yandex.ru::sales-marketing';
my $TMP_FILE = '/tmp/sm-upload.tmp';
my $SOCKET = '/var/run/mysqld.msales/mysqld.sock';
my $DB = 'direct_logs';

my $dbh = DBI->connect("DBI:mysql:$DB;mysql_socket=$SOCKET", 'root');

my %files = map {[split /\s+/, $_]->[4] => 1} split /\n/, yash_qx(rsync => $SHARE);

my @logs = (
    { table => "logcmd_agg",
      date_field => 'log_date',
      file => "logcmd_%s.csv", 
      replace => sub {qq!(uid, yandexuid, cid, bid, cmd, cnt) set log_date='$_[0]'!},
    },
    { table => "logapi_agg",
      date_field => 'log_date',
      file => "logapi_%s.csv", 
      replace => sub {qq!(uid, cmd, cnt, units) set log_date='$_[0]'!},
    },
    { table => "user_units_log_agg",
      date_field => 'log_date',
      file => "user_units_log_%s.csv", 
      replace => sub {qq!(uid, scheme, rating, units) set log_date='$_[0]'!},
    },
    { table => "logbalance_agg",
      date_field => 'log_date',
      file => "logbalance_%s.csv", 
      replace => sub {q!!},
    },
    { table => "logwelcomeletters_agg",
      date_field => 'logtime',
      file => "logwelcomeletters_%s.csv", 
      replace => sub {qq!COLUMNS OPTIONALLY ENCLOSED BY '"' IGNORE 1 LINES!},
    },
    );

for my $log_info (@logs) {
    my ($last_date) = $dbh->selectrow_array("SELECT date_format(max($log_info->{date_field}), '%Y%m%d') FROM $log_info->{table}");
    $last_date ||= 20100101;
    for my $date (get_distinct_dates($last_date, yesterday())) {
        my $file = sprintf($log_info->{file}, $date);
        next if !$files{$file};
        print "$log_info->{table} $date\n";
        yash_system(rsync => "-q", "$SHARE/$file", $TMP_FILE);
        yash_system(mysql => '-u' => 'root', '-S' => $SOCKET, 
               '-e' =>  "load data local infile '$TMP_FILE' replace into table $DB.$log_info->{table} ".$log_info->{replace}->($date)
        );
    }
}

END {
	unlink($TMP_FILE) if -f $TMP_FILE;
}
