#!/usr/bin/perl -w

=head1 NAME

    get-geobase3

=head1 DESCRIPTION

    Получаем геобазу в бинарном виде, проверяем, кладёв в /opt/geobase3/geodata.bin

=cut

use strict;
use warnings;

use LWP::UserAgent;
use File::Slurp;
use File::Basename;
use File::Copy;
use Pid::File::Flock qw/:auto/;
use Getopt::Long;
use geobase3;

my $geobase_path = '/opt/geobase3/geodata.bin';
my $newfile = '/var/cache/geobase/geodata3.bin';
my $tmpfile = '/opt/geobase3/geodata.bin.new'; 

my $INIT;
GetOptions(
    "init" => \$INIT,
) || die "Usage: $0 [--init]";

exit 0 if $INIT && -e $geobase_path;

# создаём директорию
my $dir = dirname($geobase_path);
if (!-d $dir) {
    mkdir($dir) || die "Can't create dir $dir: $!";
}

# проверяем наличие geodata3.bin
if (! -f $newfile) {
    die "Not found $newfile: $!";
}

if ((-f $geobase_path) && ( (stat($geobase_path))[7] == (stat($newfile))[7] )) {
    exit 0;
}

# проверяем базу
my $res = `geobase-generator-3 --verify $newfile`;
if ($?) {
    die "geobase-generator check failed: $!, $res";
}

# проверяем работу реальных вызовов
my $lookup = geobase3::lookup->new($newfile, "") or die "Failed to init lookup object";
$lookup->region_id($_) for qw/194.106.218.230 95.108.173.153 77.243.99.82 212.152.36.226/;

# окончательный ренейм
copy($newfile, $tmpfile) || die "Can't rename $newfile -> $tmpfile: $!";

# сохраняем старую версию, на всякий случай
if (-e $geobase_path) {
    rename($geobase_path, "$geobase_path.old") || die "Can't rename $geobase_path -> $geobase_path.old: $!";
}

# окончательный ренейм
rename($tmpfile, $geobase_path) || die "Can't rename $tmpfile -> $geobase_path: $!";
