use strict;
use warnings;
use constant DEBUG => 0;

our ($KEYLOGGER,$DATABASE,$BUF_SIZ);
require "constants.pl";
my %db_words = ();

# ########################################################################

sub db_import {
   my ($fname,$win_siz_min,$win_siz_max)=@_;
   my $siz=$win_siz_max;


   open(DB,"<$fname") or die "Could not open database \'$fname\'";

   while(my $entry=<DB>) {
      chomp($entry);

      print "Importing \'$entry\' ..." if DEBUG>=2;

      if(length($entry)<=$BUF_SIZ) {
         if(length($entry)>$win_siz_max) { 
            $win_siz_max=length($entry); 
         }
         if(length($entry)<$win_siz_min) { 
            $win_siz_min=length($entry); 
         }
         if(!(exists $db_words{$entry})) {
            $db_words{$entry}=undef;
            print "OK!\n" if DEBUG>=2;
         }
      } else {
         my $e=substr($entry,0,$BUF_SIZ);
         $win_siz_max=$BUF_SIZ; #added a string of BUF_SIZ len
            print "FAILED: " if DEBUG>=2;
         if(!(exists $db_words{$e})) {
            $db_words{$e}=undef;
            print "added substring \'$e\' instead!\n" if DEBUG>=2;
         }
      }
   }
   if(DEBUG>=2) {
      print "win_siz_max=$win_siz_max\t".
         "win_siz_min=$win_siz_min\n";
   }
   $siz=$win_siz_max; # readjust window size
   close(DB);

   return ($win_siz_min,$win_siz_max,$siz);
}

sub db_print {
   print "Current entries in the database: \n";
   print "\n ".("-"x78)."\n";
   foreach my $key (keys %db_words) {
      print "$key\n";
   }
   print "\n ".("-"x78)."\n";
}

sub db_lookup {
   my $s=shift;
   print "looking $s up..." if DEBUG>=3;
   if(exists $db_words{$s}) {
      print "YES!\n" if DEBUG>=3;
      return 1;
   } else {
      print "NO!\n" if DEBUG>=3;
      return 0;
   }
}

sub db_set {
   my ($s,@vec)=@_;
   if(db_lookup($s)) {
      push(@{$db_words{$s}},@vec);
      return 1;
   } else {
      return 0;
   }
}

sub db_get {
   my $s=shift;
   if(defined $db_words{$s}) {
      return @{$db_words{$s}};
   } else {
      return undef;
   }
}

# THIS RETURN MATLAB ARRAY  FORMAT: 
sub db_get_str {
   my $s=shift;
   if(defined $db_words{$s}) {
      return "$s = [ ".(join(";\n\t",@{$db_words{$s}}))."];\n";
   } else {
      return undef;
   }
}
# print all according to format of db_get_str
sub db_print_all {
   my $all="";
   foreach my $key (keys %db_words) {
      my $tmp=db_get_str($key);
      $all.=$tmp if defined $tmp;
   }
   return $all;
}

# ########################################################################

1;

