#!/usr/bin/perl -w

use strict;
use File::Copy;

# might need changes for the server
my $newtilepath = "/mnt/agami/openstreetmap/tah/Tiles/";
my $legacytilepath = "/mnt/agami/openstreetmap/tah/Tiles/";
my $oceans_db_file = "/var/www/tah/Tiles/oceantiles_12.dat";
my $layer = "tile";

sub tiletype { # tells type (land/see) of tile based on oceantiles.dat
    # ripped from lookup_handler in close-areas.pl in the T@h client
    my ($x, $y) = @_;
    my $tileoffset = ($y * (2**12)) + $x;
    my $fh;
    open($fh, "<", $oceans_db_file) or die "Can't open oceantiles.dat\n";
    seek $fh, int($tileoffset / 4), 0;
    my $buffer;
    read $fh, $buffer, 1;
    $buffer = substr( $buffer."\0", 0, 1 );
    $buffer = unpack "B*", $buffer;
    my $str = substr( $buffer, 2*($tileoffset % 4), 2 );
    close($fh);

    # $str eq "00" => unknown (not yet checked)
    # $str eq "01" => known land
    # $str eq "10" => known sea
    # $str eq "11" => known edge tile

    return $str;
}

sub get_legacyname { # gets filename of legacy type
    my ($x, $y) = @_;
    return sprintf("%s/%s/%02d/%03d/%03d/%03d/%03d.png", $newtilepath, $layer, 12, ($x/1000), ($x%1000), ($y/1000), ($y%1000));
}

sub get_newname { # gets filename of new type
    my ($x, $y) = @_;
    return sprintf("%s/%s_%d/%04i/%i_%i", $legacytilepath, $layer, 12, $x, $x, $y);
}

sub is_legacy { # tells if tile is in legacy format
    my ($x, $y) = @_;
    my $filename = get_legacyname($x, $y);
    return ( -e $filename);
}

sub is_new { # tells if tile is in new (non-legacy) format
    my ($x, $y) = @_;
    my $filename = get_newname($x, $y);
    return ( -e $filename);
}

#main
my ($x, $y);          # coords for the loop
my ($srcx, $srcy);    # coords of src tile to replace legacy tiles
my $count_legacy = 0; # count legacy tiles replaced


# find ocean tile in new format
for($x = 0; $x < 2**12; $x++) {
    for($y = 0; $y < 2**12; $y++) {
        if((tiletype($x, $y) == "10") && is_new($x, $y)) { # look for sea tile in new format
            print "Tile x=$x, y=$y found to be in new format\n";
            $srcx = $x;
            $srcy = $y;
        }
    }
}

#find an replace tiles in legacy format
for($x = 0; $x < 2**12; $x++) {
    for($y = 0; $y < 2**12; $y++) {
        if((tiletype($x, $y) == "10") && is_legacy($x, $y)) { # only look at sea tiles in legacy format
            $count_legacy++;
            print "Tile x=$x, y=$y found to be in legacy format\n";
            print "Copy from"+get_legacyname($srcx, $srcy)+" to "+get_newname($x, $y)+"\n";
            #copy(get_legacyname($srcx, $srcy), get_newname($x, $y)) or die "File cannot be copied.\n";
            print "Delete "+get_legacyname($srcx, $srcy)+"\n";
            #unlink(get_legacyname($srcx, $srcy)) or die "File cannot be deleted.\n";
        }
        # Seen enough to tell that the script works
        if($count_legacy > 10) {
            exit(0);
        }
    }
}
