#!/usr/bin/perl

#michal grezl walley@walley.org

use POSIX strftime;
use File::Copy;
use File::Basename;
use Getopt::Std;


$pwd=`pwd`;
chomp $pwd;
$pwd.="/";

my $prefixdir = $pwd;

my $prefixdir = "/var/www/garmin/kraje/routable/";
my $osm_dir = $prefixdir."osm/";
my $osm_data = $pwd."czech_republic.osm.bz2";
my $osm_data = "/var/www/garmin/kraje/czechia-latest.osm.bz2";
my $splitter = $prefixdir."splitter.jar";
my $mkgmap = $prefixdir."mkgmap.jar";
my $version = "0.0.4.0";
my $number_prefix = "4202";
my $global_mapname = "42020000";
my $tdb_number = "42029999";

my $product_parameters 
  = "--family-id=150 --family-name=walleycz --product-id=152 --product-version=1 --series-name='OSMCZ by walley' ";

################################################################################
sub log_string()
################################################################################
{
  print strftime ("%d%m%Y-%H:%M:%S:",localtime(time())), @_;
}

################################################################################
sub cut_main_osm()
################################################################################
{
 &log_string("--------------\n".`pwd`);


# system("rm $osm_dir/*.osm");
# system("rm $osm_dir/*.osm.mp");
 chdir $osm_dir || die;
# $sys_string = "/usr/bin/java -Xmx512m -jar $splitter --max-nodes=1000000 $osm_data";
 $sys_string = "/usr/bin/java -Xmx512m -jar $splitter  --mapid=42020000 --max-nodes=1100000 --output=xml $osm_data";
 &log_string($sys_string);
 system($sys_string);
 &log_string(`pwd`."--------------\n");
}

################################################################################
sub create_img ()
################################################################################
{
#trim $input =~ s/^\s+|\s+$//g
  chdir $osm_dir || die;

  opendir(DIR, $osm_dir) || die "can't opendir $osm_dir: $!";
  @files = grep { /osm.gz$/ && -f "$osm_dir/$_" } readdir(DIR);
  closedir DIR;

  my $j = 0;
  my $mapname;

  foreach $i (@files) {
    &log_string("create_img():Processing ".$osm_dir.$i."\n");

    my($filename, $directories, $suffix) = fileparse($osm_dir.$i,".osm.gz");
    $mapname = $filename;
    $filename .= ".osm.gz";
    &log_string("filename:$filename mapname:$mapname\n");

    my $params, $extra_params, $normal_params;

    $extra_params = " --road-name-pois --make-all-cycleways --remove-short-arcs --add-pois-to-areas --drive-on-right --check-roundabouts ";
    $extra_params .= " --latin1 --show-profiles=1 --link-pois-to-ways --location-autofill=2 ";
    $extra_params .= " --style-file=".$prefixdir."walley_style ";
    $extra_params .= $product_parameters;
    $dmy = strftime ("%d%m%Y",localtime(time()));
    $normal_params = " --mapname=$mapname --description='osmcz-w-$mapname-".$dmy."' ";
    $normal_params .= " --country-name='Czech Republic' --country-abbr=CZE  --route ";

#    $extra_params .= " --charset='windows-1250' --code-page='1250' --lower-case ";
#    $params = "--overview-mapname=$tdb_number --country-name=czechrepublic --country-abbr=CZ";
#    $params .= " --family-name=walleycz --family-id=150  --product-id=152";
#    $params .= " --nseries-name='OSMCZ by walley' --description='walley' ";

    $rs = "/usr/bin/java -Xmx512m -jar $mkgmap $extra_params $normal_params ".$prefixdir."osm/$filename";
    &log_string("$rs\n");
    system($rs);
  }
}

################################################################################
sub copy_typ()
################################################################################
{
  copy($prefixdir."42020100.TYP", $osm_dir."42020100.TYP") or die "Copy failed: $!";
}

################################################################################
sub copy_gmapsupp()
################################################################################
{
  copy($osm_dir."gmapsupp.img", $prefixdir."/gmapsupp/"."gmapsupp.img") or die "Copy failed: $!";
}

################################################################################
sub create_mapset()
################################################################################
{
  &log_string("*** Creating mapset\n");
  &log_string("removing files \n");
  $cnt = unlink $osm_dir.'gmapsupp.img', $osm_dir.$tdb_number.'.tdb',
                $osm_dir.$tdb_number.'.img', $osm_dir."install.nsi",
                $osm_dir.$tdb_number.".mdx", $osm_dir.$tdb_number."_mdr.img",
                $osm_dir.$tdb_number."_license.txt";
  &log_string("removed $cnt files\n");
  &log_string("generating mapset\n");
  chdir $osm_dir || die;

  my $params;

  $params = "--description='walley_main' ";
  $params .= " --overview-mapname=$tdb_number --tdbfile --country-name='Czech Republic' --country-abbr=CZE";
  $params .= " --latin1 ";
  $params .= " --index --make-poi-index ";
  $params .= $product_parameters;
  $params .= " --nsis ";

  my $gen_string = "/usr/bin/java -Xmx512m -jar $mkgmap $params ".$osm_dir."*.img ".$prefixdir."/contours/*img ".$osm_dir."42020100.TYP";
  &log_string("Command: $gen_string\n");
  system($gen_string);

  ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
  $year += 1900;
  $mon = sprintf("%02d", ++$mon);
  $mday = sprintf("%02d", $mday);
  $all_name="all$year$mon$mday.zip";
}

################################################################################
sub create_gmapsupp()
################################################################################
{
  &log_string("*** Creating gmapsupp\n");
  &log_string("removing old gmapsupp \n");
  $cnt = unlink $osm_dir.'gmapsupp.img';
  &log_string("removed $cnt files\n");
  &log_string("generating gmapsupp.img\n");
  chdir $osm_dir || die;

  my $params;

  $params = " --gmapsupp ";
  $params .= $product_parameters;
  $params .= " --overview-mapname=$tdb_number --tdbfile --country-name='Czech Republic' --country-abbr=CZE";

  my $gen_string = "/usr/bin/java -Xmx512m -jar $mkgmap $params ".$osm_dir."*.img ".$prefixdir."/contours/*img ".$osm_dir."42020100.TYP";
  &log_string("Command: $gen_string\n");
  system($gen_string);
  &copy_gmapsupp();
}

################################################################################
sub create_nsis
################################################################################
{
  my $unzip_str = "unzip ".$prefixdir."archiv/all_latest.zip -d /tmp/x";
  &log_string($unzip_str);
  mkdir "/tmp/x";
  unlink </tmp/x/*>;
  system($unzip_str);
  system("makensis  -DOutFile=/tmp/setup_myApp.exe /tmp/x/install.nsi");
  unlink("/home/walley/www/garmin/kraje/routable/installer/osmcz.exe");
  system("mv /tmp/x/walleycz.exe /home/walley/www/garmin/kraje/routable/installer/osmcz.exe");
}

################################################################################
sub create_package
################################################################################
{

  system($prefixdir."repairnsi");

  &log_string("-zipping-\n");
  my @files;

  push(@files,$osm_dir."/".$tdb_number."_license.txt");
  push(@files,$osm_dir."42020100.TYP");
  push(@files,$osm_dir."*.nsi");
  push(@files,$osm_dir."*.img");
  push(@files,$osm_dir."*.tdb");
  push(@files,$osm_dir."*.mdx");
  push(@files,$prefixdir."contours/*.img");

  $files_parameter = join (" ", @files);

  unlink($prefixdir."archiv/$all_name");
  my $zip_str = "/usr/bin/zip -j ".$prefixdir."archiv/$all_name ".$files_parameter;
  &log_string($zip_str."\n");
  system($zip_str);
  system("ln -sf ".$prefixdir."archiv/$all_name ".$prefixdir."archiv/all_latest.zip");
}

################################################################################
sub version()
################################################################################
{
  print "
$0  Copyright (C) 2011  michal grezl
This program comes with ABSOLUTELY NO WARRANTY; 
This is free software, and you are welcome to redistribute it
under certain conditions.
";
}

################################################################################
sub help()
################################################################################
{
  &version();
  print "Usage: $0 [OPTION]\n\n";
  print "order matters\n\n";
  print " -x  cut\n";
  print " -c  create maps\n";
  print " -t  add typ\n";
  print " -b  build mapset\n";
  print " -z  zip\n";
  print " -h  help\n";
  print " -g  gmapsupp\n";
  print " -m  mapsource installer\n";
  exit 0;
}

################################################################################
sub HELP_MESSAGE()
################################################################################
{
  &help();
}

################################################################################
sub VERSION_MESSAGE()
################################################################################
{
  &version();
}


################################################################################
# Main
################################################################################

%options=();
getopts("hxctbzgm",\%options);

if (defined $options{h}) {&help();}

if (defined $options{x}) {&log_string("[8<]\n"); &cut_main_osm();}
if (defined $options{c}) {&log_string("[create_maps]\n"); &create_img();}
if (defined $options{t}) {&log_string("[typ]\n"); &copy_typ();}
if (defined $options{b}) {&log_string("[build mapset]\n"); &create_mapset();}
if (defined $options{z}) {&log_string("[zip]\n"); &create_package();}
if (defined $options{g}) {&log_string("[gmapsupp]\n"); &create_gmapsupp();}
if (defined $options{m}) {&log_string("[mapsource installer]\n"); &create_nsis();}
&log_string("[done]\n");
exit(0);
