package Wikimap;

use base 'CGI::Maypole';
use strict;
use warnings;

BEGIN { Wikimap->setup( "dbi:Pg:dbname=limehouse" ); }
Wikimap->config->{uri_base} = "http://locative.us/bin/wikimap/";
Wikimap->config->{template_root} = "/www/locative.us/docs/wikimap/tt2";
Wikimap->config->{rows_per_page} = 10;
Wikimap->config->{display_tables} = [qw[trackseg trackpt]];

Wikimap::Trackseg->has_many( trackpt => "Wikimap::Trackpt" );
Wikimap::Trackseg->untaint_columns( email => [qw[ owner ]] );

package Wikimap::Trackseg;

use Geo::Track::Log;
use strict;
use warnings;

sub upload :Exported {}

sub do_upload :Exported {
    my ($self, $r) = @_;
    my $cgi = $r->get_request;
    my $gpx = $cgi->upload("gpx")
	or return $r->error("You didn't supply a GPX track!");

    my $track = Geo::Track::Log->new;
    eval { $track->loadTrackFromGPX($gpx) }
	or return $r->error($@);

    my $h = CGI::Untaint->new( %{$r->params} );
    my $obj;

    for my $pt (@{$track->{log}}) {
	$obj = $self->create_from_cgi( $h => { required => "owner" } )
	    if $pt->{new_segment_flag};

	$obj->add_to_trackpts({
		point => 
		"SRID=4326;POINT('$pt->{long} $pt->{lat} $pt->{elevation}')",
		stamp => $pt->{timestamp}
		});
    }
}

1;
