#!/usr/bin/perl
#
# cartridge-ctl type=vae query=list
#
# cartridge-ctl cartridge=vae-lpr file=validate.js type=camera

use strict;

my %ARGS = map{/(^\w+)=(.+)/} grep {/(^\w+)=(.+)/} @ARGV; # collect named args
my $CTL='cartridge-ctl';
my $CONF="$ENV{APL}/conf/etc/device";
my $OPT='/opt';

# SUBS -----------------------------------------------------------------------
sub usage_exit {
  print "\nusage:\t$CTL type=vae query=list\n"
       ."\t$CTL query=camera/default/edit.cfg\n"
       ."\t$CTL cartridge=vae-lpr file=validate.js type=camera model=default\n\n";
  exit 1;
}

sub cartridge_list {
  my $type=$ARGS{type};
  opendir(DIR, $OPT) || die "can't opendir $OPT: $!";
  my @list=map {/$type-(\w+)/} grep {/$type-(\w+)/ } readdir DIR;
  closedir DIR;
  print "$_\n" foreach(@list);
}

sub path_list {
  my $type='vae';
  opendir(DIR, $OPT) || die "can't opendir $OPT: $!";
  my %list=map {/$type-(\w+)/;($1,"$OPT/$_")} grep {/$type-(\w+)/ } grep { -f "$OPT/$_/etc/version.cfg" } readdir DIR;
  closedir DIR;
  print "$_=$list{$_}\n" foreach(sort keys %list);
}

sub edit_list {
  my ($dev,$id)=@_; 
#  print "/usr/bin/find /opt/vae-*/etc/$dev/$id -name edit.cfg\n";
  open(DEFAILT_LIST,"/usr/bin/find /opt/vae-*/etc/$dev/$id -name edit.cfg|") ||
                dir("Cannot find /opt/vae-*/etc/$dev/$id");
  my @list= sort <DEFAILT_LIST>;
  close DEFAILT_LIST;
#  unshift(@list,"$CONF/$dev/$id/etc/edit.cfg\n") if -f "$CONF/$dev/$id/etc/edit.cfg";
#  @list;
  print  foreach(@list); 
}

sub edit_defs{       # unused
  my ($dev,$id)=@_; 
  my @list1=edit_list($dev,'default');
  my @list2;
  @list2=edit_list($dev,$id) if $id ne 'default';
  print  foreach(@list1,@list2);
}

#----------------------------------------------------------------------------
# retrun list of path/to/file
# args: cartridge=vae-lpr file=validate.js type=camera
#       file      - mandatory (edit.cfg, validate.js etc)
#       cartridge - optional (vae-lpr|var-test)
#       type      - optional (camera|sensor etc)
#       model     - optional (default|UDP etc)
# results:
# /opt/vae-sample/etc/camera/UDP/etc/edit.cfg
# /opt/vae-sample/etc/camera/default/etc/edit.cfg
# /opt/vae-test/etc/camera/default/etc/edit.cfg
#----------------------------------------------------------------------------
sub file_list {
   
  my $dev  =(exists $ARGS{type})     ? $ARGS{type}     :'*';
  my $vae  =(exists $ARGS{cartridge})? $ARGS{cartridge}:'vae-*';
  my $file =(exists $ARGS{file})     ? $ARGS{file}     :'*';
  my $model=(exists $ARGS{model})    ? $ARGS{model}    :'*';
  open(LIST,"/usr/bin/find /opt/$vae/etc/$dev/$model -name '$file'|") ||
     dir("Cannot find /opt/$vae/etc/$dev/ -name '$file'");  # never happens
  my @list= <LIST>;
  close LIST;
  
  my @list1 = sort grep {  m|/default/|} @list; 
  my @list2 = sort grep {! m|/default/|} @list; 

  print  foreach(@list1,@list2);
}

#MAIN ========================================================================

usage_exit()      if not exists $ARGS{query} and not exists $ARGS{file};
path_list         if $ARGS{query} eq 'list';
edit_list($1,$2)  if $ARGS{query}=~m|^(\w+)/(\w+)/edit.cfg$|;
file_list         if exists $ARGS{file};
# sample call : cartridge-ctl cartridge=vae-lpr file=validate.js type=camera

