#!/usr/bin/perl -w

#### add option args for movixrc opts

use strict;
use Cwd 'abs_path';
use vars qw(
	    $supported
	    $files
	    $lang
	    $kbd
	    $font
	    $bckg
	    $codecs
	    $help
	    $eMoviXdir
	   );

# MoviX v0.9.0
$eMoviXdir = "/usr/share/emovix";

#######################
### Retrieve options from command line
#################################
use Getopt::Long;
use Pod::Usage;

GetOptions (
	    "supported=s"  => \$supported,
	    "files"        => \$files,
	    "lang=s"       => \$lang,
	    "kbd=s"        => \$kbd,
	    "font=s"       => \$font,
	    "background=s" => \$bckg,
	    "codecs=s"     => \$codecs,
	    "help"         => \$help
            );

$lang = "en"                  unless defined $lang;
$kbd  = "us"                  unless defined $kbd;
$font = "FreeSerifBoldItalic" unless defined $font;
$bckg = "movix.music.avi"     unless defined $bckg;
$codecs = "none"              unless defined $codecs;

SWITCH: {
  printSupp($supported), exit               if defined $supported;
  printFiles($lang,$kbd,$font,$bckg), exit  if defined $files;
}

help(), exit if defined $help;
print "$eMoviXdir\n";

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

sub printSupp {
  my $s = shift;
  my $data;

  foreach (split "\n", `ls $eMoviXdir/translations/`){
    push @{$data->{"lang"}}, $_ if -d "$eMoviXdir/translations/$_";
  }
  foreach (split "\n", `ls $eMoviXdir/keyboard-i18n/`){
    push @{$data->{"kbd"}}, $_ if -d "$eMoviXdir/keyboard-i18n/$_";
  }
  foreach (split "\n", `ls $eMoviXdir/mplayer-fonts/`){
    push @{$data->{"font"}}, $1 if /^(.+)\.ttf$/i;
  }
  foreach (split "\n", `ls $eMoviXdir/backgrounds/`){
    push @{$data->{"background"}}, $_ if /\.avi$/i;
  }
  if( -e "$eMoviXdir/codecs/" ){
    foreach (split "\n", `ls $eMoviXdir/codecs/`){
      push @{$data->{"codecs"}}, "win32"      if $_ eq "win32codecs.tar.bz2";
      push @{$data->{"codecs"}}, "quicktime"  if $_ eq "qt6dlls.tar.bz2";
      push @{$data->{"codecs"}}, "realplayer" if $_ eq "rp9codecs.tar.bz2";
    }
  }

#  $data->{"lang"} = ["en","it","es","nl","hu","de","fr","pt","pl","jp","sar","esp"];
#  $data->{"kbd"}  = ["us","de","es","fr","hu","it","nl","pt","be"];
#  $data->{"font"} = ["FreeMonoBoldOblique","FreeSansBold","FreeSansBoldOblique","FreeSansOblique","FreeSerifBoldItalic","FreeSerifItalic","Vera","VeraBd","VeraIt","VeraMoBd","VeraMoIt","VeraMono","VeraSe","VeraSeBd"];
#  $data->{"background"} = ["black.avi","coresis.avi","movix.music.avi"];

  foreach (@{$data->{$s}}) {print "$_\n"}
}

sub printFiles {
  my $l = shift;
  my $k = shift;
  my $f = shift;
  my $b = shift;

  print "/eMoviX/help/ $eMoviXdir/translations/$l/credits.man\n";
  print "/eMoviX/help/ $eMoviXdir/translations/$l/help.sh\n";
  print "/eMoviX/help/ $eMoviXdir/translations/$l/helpsub.sub\n";
  print "/eMoviX/help/ $eMoviXdir/translations/$l/menu.man\n";
  print "/eMoviX/help/ $eMoviXdir/translations/$l/mplayer.man\n";
  print "/eMoviX/help/ $eMoviXdir/translations/$l/progress.sh\n";

  print "/eMoviX/movix/ $eMoviXdir/movix/bugReport.sh\n";
  print "/eMoviX/movix/ $eMoviXdir/movix/isapnpmodules.sh\n";
  print "/eMoviX/movix/ $eMoviXdir/movix/movix-files\n";
  print "/eMoviX/movix/ $eMoviXdir/movix/profile\n";
  print "/eMoviX/movix/ $eMoviXdir/movix/setHardware.pl\n";
  print "/eMoviX/movix/ $eMoviXdir/movix/config\n";
  print "/eMoviX/movix/ $eMoviXdir/movix/manpage.txt\n";
  print "/eMoviX/movix/ $eMoviXdir/backgrounds/$b\n";
  print "/eMoviX/movix/ $eMoviXdir/movix/rc.lirc\n";
  print "/eMoviX/movix/ $eMoviXdir/movix/showisapnpmodules.sh\n";
  print "/eMoviX/movix/ $eMoviXdir/movix/help.txt\n"; 
  print "/eMoviX/movix/ $eMoviXdir/movix/menu.conf\n";
  print "/eMoviX/movix/ $eMoviXdir/movix/movix.pl\n"; 
  print "/eMoviX/movix/ $eMoviXdir/movix/rc.movix\n";
  print "/eMoviX/movix/ $eMoviXdir/movix/showpcimodules.sh\n";
  print "/eMoviX/movix/ $eMoviXdir/movix/input.conf\n"; 
  print "/eMoviX/movix/ $eMoviXdir/movix/mixer.pl\n";  
  print "/eMoviX/movix/ $eMoviXdir/movix/movixrc\n";
  print "/eMoviX/movix/ $eMoviXdir/movix/remotes.data\n";

  print "/eMoviX/mplayer/ $eMoviXdir/translations/$l/menu.conf\n";
  print "/eMoviX/mplayer/ $eMoviXdir/mplayer-fonts/$f.ttf\n";

  print "/eMoviX/remotes/ $eMoviXdir/remotes/lircd.conf.abit\n";
  print "/eMoviX/remotes/ $eMoviXdir/remotes/lircd.conf.grundig_tp720\n";
  print "/eMoviX/remotes/ $eMoviXdir/remotes/lircd.conf.hauppauge\n";
  print "/eMoviX/remotes/ $eMoviXdir/remotes/lircd.conf.hauppauge2\n";
  print "/eMoviX/remotes/ $eMoviXdir/remotes/lircd.conf.haupserial\n";
  print "/eMoviX/remotes/ $eMoviXdir/remotes/lircd.conf.haupsir\n";
  print "/eMoviX/remotes/ $eMoviXdir/remotes/lircd.conf.kingman_code_026\n";
  print "/eMoviX/remotes/ $eMoviXdir/remotes/lircd.conf.logitech\n";
  print "/eMoviX/remotes/ $eMoviXdir/remotes/lircd.conf.packard_bell\n";
  print "/eMoviX/remotes/ $eMoviXdir/remotes/lircd.conf.pctv\n";
  print "/eMoviX/remotes/ $eMoviXdir/remotes/lircd.conf.realmagic\n";
  print "/eMoviX/remotes/ $eMoviXdir/remotes/lircd.conf.toshiba\n";
  print "/eMoviX/remotes/ $eMoviXdir/remotes/lircrc.abit\n";
  print "/eMoviX/remotes/ $eMoviXdir/remotes/lircrc.grundig_tp720\n";
  print "/eMoviX/remotes/ $eMoviXdir/remotes/lircrc.hauppauge\n";
  print "/eMoviX/remotes/ $eMoviXdir/remotes/lircrc.hauppauge2\n";
  print "/eMoviX/remotes/ $eMoviXdir/remotes/lircrc.haupserial\n";
  print "/eMoviX/remotes/ $eMoviXdir/remotes/lircrc.haupsir\n";
  print "/eMoviX/remotes/ $eMoviXdir/remotes/lircrc.kingman_code_026\n";
  print "/eMoviX/remotes/ $eMoviXdir/remotes/lircrc.logitech\n";
  print "/eMoviX/remotes/ $eMoviXdir/remotes/lircrc.packard_bell\n";
  print "/eMoviX/remotes/ $eMoviXdir/remotes/lircrc.pctv\n";
  print "/eMoviX/remotes/ $eMoviXdir/remotes/lircrc.realmagic\n";
  print "/eMoviX/remotes/ $eMoviXdir/remotes/lircrc.toshiba\n";

  print "/eMoviX/boot/ $eMoviXdir/keyboard-i18n/$k/bootkey.map\n";
  print "/eMoviX/boot/ $eMoviXdir/translations/$l/credits.txt\n";
  print "/eMoviX/boot/ $eMoviXdir/translations/$l/expert1.txt\n";
  print "/eMoviX/boot/ $eMoviXdir/translations/$l/expert2.txt\n";
  print "/eMoviX/boot/ $eMoviXdir/isolinux/initrd.gz\n";
  print "/eMoviX/boot/ $eMoviXdir/isolinux/isolinux.bin\n";
  print "/eMoviX/boot/ $eMoviXdir/isolinux/isolinux.cfg\n";
  print "/eMoviX/boot/kernel/ $eMoviXdir/isolinux/kernel/vmlinuz\n";
  print "/eMoviX/boot/ $eMoviXdir/isolinux/movix.lss\n";
  print "/eMoviX/boot/ $eMoviXdir/translations/$l/movix.msg\n";
  print "/eMoviX/boot/ $eMoviXdir/translations/$l/mphelp.txt\n";
  print "/eMoviX/boot/ $eMoviXdir/translations/$l/mxhelp.txt\n";
  print "/eMoviX/boot/ $eMoviXdir/keyboard-i18n/$k/shellkey.map\n";
  print "/eMoviX/boot/ $eMoviXdir/translations/$l/trblst.txt\n";
  print "/eMoviX/boot/ $eMoviXdir/translations/$l/trblst2.txt\n";

  print "/eMoviX/codecs/ $eMoviXdir/codecs/win32codecs.tar.bz2\n"
    if $codecs =~ /^all$|win32/ and -e "$eMoviXdir/codecs/win32codecs.tar.bz2";
  print "/eMoviX/codecs/ $eMoviXdir/codecs/qt6dlls.tar.bz2\n"
    if $codecs =~ /^all$|quicktime/ and -e "$eMoviXdir/codecs/qt6dlls.tar.bz2";
  print "/eMoviX/codecs/ $eMoviXdir/codecs/rp9codecs.tar.bz2
/eMoviX/codecs/ $eMoviXdir/codecs/rp9win32codecs.tar.bz2\n"
    if $codecs =~ /^all$|realplayer/ 
      and -e "$eMoviXdir/codecs/rp9codecs.tar.bz2" 
      and -e "$eMoviXdir/codecs/rp9win32codecs.tar.bz2";

}

sub help {
  print "
Usage: movix-conf [options]

Options:

     --supported=<item>         Lists all supported languages/kbd layouts/
  item:   lang kbd font         truetype fonts/backgrounds
          background codecs   

     --files                    Prints a list of all files to be added to a
                                eMoviX ISO image (right column) plus the ISO 
                                dir in which they are supposed to go (left col.)

     --lang                     Specify a language different from default (en)

     --kbd                      Specify a keyboard layout different from default (us)

     --font                     Specify a font different from default (FreeSerifBoldItalic) 
                                             
     --background               Specify a background different from default (movix.music.avi)
     
     --codecs                   Specify which codecs will go in the CD (none by default)

";
}
