#!/usr/bin/perl

use strict;
use warnings;
use lib "/opt/pos/lib";
use Data::Dumper;
use DBI;
use App::POS::Config;
use App::POS::DB::Postgres;

my $dsn = 'DBI:Pg:dbname=pos;host=127.0.0.1';
my $user = 'root';
my $passwd = '';
my $db = App::POS::DB::Postgres->new(dbh => DBI->connect($dsn,$user,$passwd,{}));

my $counters = $db->select(qq{
  SELECT * FROM counters WHERE name = 'doc_counters' ORDER BY key
});

my %doc_counters;
my %docs_by_name;
my $ans = "";

foreach my $c (@$counters) {
  $doc_counters{ $c->{key} } = $c;
}

while ($ans ne 'q') {
  my %keys = ();
  my %idx_to_key = ();
  my $count = 1;

  foreach my $k (sort keys %doc_counters) {
    my $doc = "";

    if ($k =~ /#/) {
      my @a = split /#/, $k;
      $doc = $a[0];
    } else {
      $doc = $k;
    }

    $idx_to_key{ $count } = $k;

    print sprintf("%2s", $count).") ".sprintf("%-3s", $doc)." = ".$doc_counters{$k}->{value}."\n";

    $count++;
  }

  print "\n('q' to quit)\n";
  print "\nDoc?\n";
  my $selected_doc = <>;
  chop($selected_doc);
  $selected_doc = uc($selected_doc);

  if ($selected_doc eq 'Q') {
    exit;
  }

  if (! exists $idx_to_key{$selected_doc}) {
    print "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n";
    print "!!!!!!!!!! INVALID SELECTION !!!!!!!!!!!\n";
    print "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n";
    exit;
  }

  my $doc = $doc_counters{$idx_to_key{$selected_doc}};

  print "\nNew Num?\n";
  my $selected_num = <>;
  chop($selected_num);

  if ($selected_num !~ /^\d+$/) {
    print "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n";
    print "!!!!!!!!!! INVALID NUMBER !!!!!!!!!!!\n";
    print "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n";
    exit;
  }

  $db->do(
    "UPDATE counters SET value = ? WHERE name = ? AND key = ?",
    $selected_num, $doc->{name}, $doc->{key},
  );

  print "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n";
  print "!!!!!!!!!!!!!!! DONE !!!!!!!!!!!!!!!!\n";
  print "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n";
  exit;
}

