#!/usr/bin/perl

use strict;
use warnings;
use SKM::DB;
use JSON;
use Encode;

my %args = map {/^(\w+)=(.*)/} grep {/^\w+=/} @ARGV;
my $dbm = DBMaster({ PrintError=>0, RaiseError=>1 });
my $avatarid = $args{AVATARID};
my $details = $args{DETAILS};
die "Invalid avatarid!" if defined $avatarid and $avatarid !~ /^\d+$/;

my $query = 
        "SELECT o.obj,o.name, a1.val AS report, a2.val AS prop_int 
         FROM _objs o, _obj_attr a1, _obj_attr a2 
         WHERE otype='V' AND o.obj=a1.obj AND a1.attr='STAT_TIME' 
          AND o.obj=a2.obj AND a2.attr='STATUS_PROPOGATION_INTERVAL' AND o.deleted=0
        ";
$query .= " AND o.obj=$avatarid" if defined $avatarid;
my $ra;

eval { $ra = $dbm->selectall_arrayref($query) };
die "DB error: $@" if $@;

my %status;
foreach my $row (@$ra) {
    my ($obj, $name, $report, $prop_int) = @$row;
    my $on = 1;
    my $diff = time - int($report);
    # consider OFFLINE if more than STATUS_PROPAGATION_INTERVAL time passed since last report
    $on = 0 if $diff > int($prop_int) + 10;
    $status{$obj}{status} = $on ? "ONLINE" : "OFFLINE";
    $status{$obj}{name} = Encode::decode("utf8", $name) if $details;
}

print encode_json(\%status) . "\n" if %status;

END {
    eval { $dbm->disconnect } if $dbm;
}
