#!/usr/bin/perl
use SKM::DB;

# CONS
my $APL = $ENV{APL};
my $VAE_LIST = "$APL/conf/bin/cartridge-ctl type=vae query=list";
my $OV5_LICENSE = "/opt/vae-ov/bin/ov5_license";

#VARS
my $dbm;
my %dbs;
my %vae_list;
my %Cams;

# SUBS
sub list_vae {
    %vae_list = map {/^(\w+)=(.*)$/} grep {/^\w+=/} `$VAE_LIST`;
    die "Error fetching vae list" if $?;
}

sub db_master {
    eval {
        $dbm = DBMaster({RaiseError => 1, PrintError => 0, AutoCommit => 1});
        $dbs{UPDATE_ATTR} = $dbm->prepare("UPDATE _obj_attr SET val=? WHERE obj=? AND attr=?");
        $dbs{CLEAR_RTIME}=$dbm->prepare("UPDATE _objs SET rtime=null WHERE obj=?");
    };
    die "DB connection failed: $@" if $@;
}

sub fetch_attributes {
    my $ra;
    eval {
        $ra = $dbm->selectall_arrayref(
            "SELECT o.obj,a.attr,a.val FROM _objs o INNER JOIN _obj_attr a 
            ON o.obj=a.obj WHERE o.deleted=0 AND o.otype='D' and o.subtype='C'"
        );
    };
    die "Fetch attributes error: $@" if $@;

    foreach my $row (@$ra) {
        my ($obj, $attr, $val) = @$row;
        next if not $obj or not $attr;
        $Cams{$obj}{$attr} = $val;
    }
}

sub fix_tier {
    for my $obj (keys %Cams) {
        my $cam = $Cams{$obj};
        next if not $cam->{VAE_OV_CONFIG};
        next if not exists $cam->{VAE_OV_TIER};
        
        my $ov_config = $cam->{VAE_OV_CONFIG};
        my $ov_tier = "basic";
        
        # Set VAE_OV_TIER attribute for correct license checking
        if (-x $OV5_LICENSE) {
            $ov_tier = `echo '$ov_config' | $OV5_LICENSE 2>/dev/null`;
            chomp $ov_tier;
            $ov_tier = "basic" unless $ov_tier;
        }
        
        print "ID=$obj TIER=$ov_tier\n";
        eval {
            $dbs{UPDATE_ATTR}->execute($ov_tier, $obj, "VAE_OV_TIER");
            $dbs{CLEAR_RTIME}->execute($obj);
        };
        die "Update tier failed: $@\n" if $@;
    }
}

# MAIN
fetch_vae;

db_master;

fetch_attributes;

fix_tier;
