#!/usr/bin/perl
use strict;
use AI::MicroStructure;
use Data::Dumper;
use LWP::UserAgent;
use JSON;

my $i=0;
my $ix=0;
my $ua = LWP::UserAgent->new;
my $dat = {};
my $res;
my $hash={};
my $matches={};
my $xjson={};
my @metas;
my $x = AI::MicroStructure->new;

my @themes = grep { !/^(?:any)/ } AI::MicroStructure->themes;
my @metas;
my @urls;


 foreach ("http://algoservice.com:5984/test/_design/generic/_view/instancex?group=true",
          "http://algoservice.com:5984/test/_design/generic/_view/query?=true",
          "http://algoservice.com:5984/list-data/_design/basic/_view/all"
        
           )
 {

 $res = $ua->get($_);


$ix++;
$hash->{$_}= decode_json($res->content);


foreach(@{$hash->{$_}->{rows}}){

    $dat->{$i++}=$_->{key};
}
#print Dumper [];
}



for my $theme (@themes) {
    no strict 'refs';
    eval "require AI::MicroStructure::$theme;";
#   next "$theme $@" if $@;
    my %isa = map { $_ => 1 } @{"AI::MicroStructure::$theme\::ISA"};
    if( exists $isa{'AI::MicroStructure::Locale'} ) {
        for my $lang ( "AI::MicroStructure::$theme"->languages() ) {
            push @metas,
                [ "AI::MicroStructure::$theme"->new( lang => $lang ),
                  ", $lang locale" ];
        }
    }
    elsif( exists $isa{'AI::MicroStructure::MultiList'} ) {
        for my $cat ( "AI::MicroStructure::$theme"->categories(), ':all' ) {
            push @metas,
                [ "AI::MicroStructure::$theme"->new( category => $cat ),
                  ", $cat category" ];
        }
    }
    else {
        push @metas, [ "AI::MicroStructure::$theme"->new(), '' ];
    }
}
my $doc={user=>`whoami`};
$doc->{user}=~ s/\n//g;

for my $test (sort @metas) {


    my $meta = $test->[0];
    my %items;
    my $items = $meta->name(0);
    $items{$_}++ for $meta->name(0);

#    push @urls," http://algoservice.com:5984/list-data/_design/basic/_view/all?reduce=false&start_key=[%22*%22]&end_key=[%22$_%22]" for $meta->name(0);    
    
    

    $doc->{count} = scalar keys %items;
    
    $doc->{items} = $meta->theme;
    $doc->{lang}= $meta->{lang};    
    $doc->{category}= $meta->{category};    
    
    $doc->{names} = [$meta->theme,metaname($doc->{count})];
    
    $doc->{search} = lc join("\|",@{$doc->{names}});

    foreach(sort grep { /($doc->{search})/ } values %$dat){
  
      $matches->{$meta->theme}->{$_}=$meta->theme;
  
    }  
     
 

}



@ARGV=("user","pass","localhost");

my $info = {};
my @themesx;
my $dbs = {};
our $VERSION='0.04';
my $json_main =  {name=>"santex",children=>[],size=>1};
my $json =  {};
my $id =  0;
my $json_lang =  {};
my $json_cat =  {};
my @ids = ();
my $json_text = {};
my @themes = grep { !/^(?:any|random)/ } AI::MicroStructure->themes;

my @ams;
my @xams;
my @names=();
$json = {name=>"",children=>[],size=>0};
my @string;
my @sense;
my ($word, $pos, $sense) ;
for my $theme (sort @themes) {
    push @themesx,$theme;
    @string=split("\n",`wordnet $theme -synsn -domnn -grepn -derin -famln -holon -treen -grepn`);
    @sense = ();
    foreach my $str(@string){
      $str = trim(forms($str));
      if($str ne "" && $str !~ /Hyponyms|Sense|senses|sense/){
      $str =~ s/=> |HAS INSTANCE//g;
      push @sense,trim($str);
      }
    }
#    die "(querySense) Bad query string: $string" if (!defined($word));
      $word = join ",",@sense;
      @sense=[map {$_ = trim($_)}split(",",$word)];
      push @xams,($theme =>[@sense]);

    eval "require AI::MicroStructure::$theme;";
    my $ams = "AI::MicroStructure::$theme"->new;
    if ( $ams->isa('AI::MicroStructure::Locale') ) {
        for my $lang (sort $ams->languages ) {
          my $a = "AI::MicroStructure::$theme"->new( lang => $lang );
   
   my  @nom = @{$a->{base}};
    @names=();
  foreach(@nom){
    
      push @names,{name=>
            sprintf( "%s_%s_%d",
              $_,$lang,
               1),
              category=>$theme,
              size=>1};
  
  }
   
            push @ams,sprintf("%s/%s/%d", $theme, $lang,$#nom+1);
            $id = sprintf( "%s_%s_%d", $a->theme, $lang,$#nom+1);
            push @{$json_lang->{children}},{name=>$id,$theme=>$a->{base}, children=>[@names],lang=>$lang,size=>$#nom+1};

        }
        #push @{$json->{children}}, $json_lang;

    }
    elsif ( $ams->isa('AI::MicroStructure::MultiList') ) {
        for my $cat (sort $ams->categories, ':all' ) {
          $json_cat->{size}++;
      my $a = "AI::MicroStructure::$theme"->new( category => $cat );
   my  @nom = @{$a->{base}};
    @names=();
  foreach(@nom){
    
      push @names,{name=>
            sprintf( "%s_%d",
              $_,
              1),
              category=>$theme,
              size=>1};
  
  }
  push @ams,sprintf("%s/%s/%d", $theme,$a->category,$#names+1);

      push @{$json_cat->{children}},{name=>
            sprintf( "%s_%s_%d",
              $theme,
              $a->category,
              1),
              $theme=>$a->{base},
                 children=>[@names],
              category=>$a->category,
              size=>$#nom+1};




        }

    }
    else {

my  @nom = $ams->name(scalar $ams->name);
  push @ams,sprintf("%s/%d", $theme,$#names+1);

  foreach(@nom){
    
      push @names,{name=>
            sprintf( "%s_%d",
              $_,
               1),
              
              $theme=>$_,
              size=>1};
  
  }
  push @{$json->{children}},
  {name=>sprintf("%s_%s", $theme,$#nom+1),
              children=>[@names],lang=>"C",category=>"no",size=>$#names};

  }
}

foreach(@themes){

 #   $res = $ua->get($_);




    push @{$xjson->{children}},{name=>sprintf("%s_%s", $_,"lists"),
              children=>[$matches->{$_}],size=>10};# unless(@var);


}


#$s->store=>();
sub forms
{
    my ($string) = shift;
    # The query string (word, pos and sense #)
    my ($word, $pos, $sense) = $string =~ /^([^\#]+)(?:\#([^\#]+)(?:\#(\d+))?)?$/;

    return $string;
}


sub trim
{
  my $string = shift;
    $string =  "" unless  $string;
  $string =~ s/^\s+//;
  $string =~ s/\s+$//;
  $string =~ s/\t//;
  $string =~ s/^\s//;
  return $string;
}
$json_main->{children}[0]=$json_cat;
$json_main->{children}[1]=$json_lang;
$json_main->{children}[2]=$json;
#$json_main->{children}[3]=$xjson;


if(1){


our $doc={};
    $doc->{'user'}=`whoami`;
    $doc->{'user'}=~s/\n//g;


my $s = AI::MicroStructure::Driver::CouchDB->new(uri=>"http://$ARGV[0]:$ARGV[1]\@$ARGV[2]:5984/",
                              db=>$doc->{'user'});


my $q = $s->retrieve("query");


$s->store(all=>$json_main);
$s->store(multi_lang=>$json_lang);
$s->store(multi_cat=>$json_cat);
$s->store(single_cat=>$json);
$s->store(list_cat=>$xjson);


$s->store("themesx"=>[@themesx]);
$s->store("steem"=>[@ams]);
$s->store("wordnet"=>[@xams]);
$s->store("remote"=>$info);

}else{

print Dumper $json_main;
print Dumper keys %$json_main;

}


  


open(my $lists,">","/var/www/sections/data/lists.json");
print $lists encode_json($xjson);
close($lists);

open(my $flarey,">","/var/www/sections/data/meta.json");
print $flarey encode_json($json_main);
close($flarey);


open(my $bundle,">","/var/www/sections/data/bundle.json");
print $bundle encode_json([AI::MicroStructure->new()->getBundle()]);
close($bundle);

open(my $steem,">","/var/www/sections/data/themesx.json");
print $steem encode_json([@ams]);
close($steem);



END{


`scp -r /var/www/sections/data/ root\@algoservice.com:/var/www/vhosts/quantup.com/httpdocs/sections/data/`;

}

1;



__DATA__


count=0; for i in `perl -MAI::MicroStructure -le 'print  for AI::MicroStructure->themes';`; do echo "@@@@@@@@@@<SET>@@@@@@@@@@@@<"$count">@@@@@@@@@<"$i">@@@@@@@@@"; count=$(expr $count + 1); perl -MAI::MicroStructure::$i  -le '$m=AI::MicroStructure::'$i'; print join(",", $m->name(scalar $m));'; perl -MAI::MicroStructure::$i  -le '$m=AI::MicroStructure::'$i'; print join(",",$m->name(scalar $m)); print join(",",$m->categories()); print 1; $ENV{LANGUAGE} , $ENV{LANG}; ';   done

for my $t (@ams) {
    my ($ams, $theme) = @$t;
    my @items = $ams->name( 0 );
    my @failed;
    my $ok = 0;
    ( /^[A-Za-z_]\w*$/ && ++$ok ) || push @failed, $_ for @items;
#    print Dumper ( $ok, @items, "All names correct for $theme" );
 #   print Dumper "Bad names: @failed" if @failed;
}

#!/usr/bin/perl
use AI::MicroStructure;
use Data::Dumper;
my $collection = {};
my $struct;
my @themes = metaname(10000);
foreach my $x(@themes)
{
my $struct = AI::MicroStructure->new($x=>10);
print Dumper $struct;
#(scalar $struct);

#[AI::MicroStructure::new,($struct->metaname,scalar $h)];

}
__DATA__
-syns -simsv -ants -faml -hype -hypo -tree -coor -deri -domn -domt -subsn -partn -membn -meron -hmern -sprtn -smemn -ssubn -holon -hholn -entav -framv -causv -pert -attr -grep
print ` wordnet chaos  -synsn  -hypen -treen -domnn -over -grepn -famln`;


print ` wordnet chaos  -synsn  -hypen -treen -domnn -over -grepn -famln`;

-syns -simsv -ants -faml -hype -hypo -tree -coor -deri -domn -domt -subsn -partn -membn -meron -hmern -sprtn -smemn -ssubn -holon -hholn -entav -framv -causv -pert -attr -grep


for i in `perl -MAI::MicroStructure -le 'print for AI::MicroStructure->themes;'`;
do
for i in `perl -MAI::MicroStructure -le 'print for AI::MicroStructure::new(theme=>$i,scalar  AI::MicroStructure::$i::new);'`; 
do
#AI::MicroStructure::new,($struct->metaname,scalar $h)
x=`perl -Micro+$i -E say+metaname | replace "_" "."`;  
out=`wordnet $x -hypen -hypon -synsn -smemn -subsn -partn`;  echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" $i $x "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@";  sleep 0.5; done;done;




  for x in {0..10};
  do
  for i in `perl -MAI::MicroStructure -le 'print for AI::MicroStructure->themes;'`;
  do
  echo "@@@@@@@@@@@@@@@@@@@@@@@@"$i"@@@@@@@@@@@@@@@@@@@";
  for n in `perl -MAI::MicroStructure -le 'print join " ", AI::MicroStructure->new(theme=>$i)->name;'`;
  do
  echo $n;
  done;
  done;
  done;
