package GPS::Magellan::File;

use strict;
use warnings;
use Data::Dumper;
use vars qw($AUTOLOAD);

sub new {
    my $proto = shift;
    my $class = ref($proto) || $proto;

    my %args = @_;

    
    my $self = bless { 
        coords => $args{coords} || [],
    }, $class;

    $self->_init();

    return $self;
}

sub _init {
    my $self = shift;

}

sub read {
    my $self = shift;
    my $file = shift;

    my @raw = ();

    if($file){
        open(INPUT, $file) or die sprintf("%s::read(): cannot open %s\n", ref($self), $file);
        @raw = <INPUT>;
        close(INPUT);
    } else {
        @raw = <STDIN>;
    }

    $self->decode(\@raw);
}

sub as_string {
    shift->encode();
}


sub write {
    my $self = shift;
    my $file = shift;

    if($file){
        open(OUTPUT, ">$file") or die sprintf("%s::write(): cannot open %s\n", ref($self), $file);
        print OUTPUT $self->encode();
        close(OUTPUT);
    } else {
        print $self->encode();
    }
    return;
}


# Interface to be implemented by subclasses representing various file formats

sub name { 'PLACEHOLDER' }

sub encode { '' }

sub decode { [] }

sub can_read { 0 }


# Accessors
sub _get {
    my $self = shift;
    my $attr = shift;
    return $self->{$attr};
}

sub _set {
    my $self = shift;
    my $attr = shift;
    my $value = shift || '';

    return unless $attr;

    $self->{$attr} = $value;
    return $self->_get($attr);
}

sub _debug_autoload {
    my $self = shift;
    $self->_set('_debug_autoload', shift) if @_;
    $self->_get('_debug_autoload');
}

    
sub AUTOLOAD {
    my $self = shift;
    my $attr = $AUTOLOAD;

    $attr =~ s/.*:://;

    return if $attr =~ /^_/;

    warn "AUTOLOAD: $attr\n" if $self->_debug_autoload;

    if(@_){
        $self->_set($attr, shift);
    }
    return $self->_get($attr);
}

sub DESTROY {

}

package GPS::Magellan::File::Way_Txt;

use strict;

use base qw/GPS::Magellan::File/;

sub name { 'GpsDrive way.txt' }

# FILE FORMAT:
# EEMSSTRA               5220.484000  454.569000 0000016M
# WPT002                 5220.879000  454.287000 0000000M

sub encode {
    my $self = shift;

    my @output = ();

    foreach my $c (@{$self->coords}){
        push @output, sprintf("%-22s %04.6f  %04.6f %07d%s\n", $c->name, $c->longitude, $c->latitude, $c->altitude, $c->unknown);
    }
    @output;
}

sub decode {
    my $self = shift;
}


1;

__END__

=head1 NAME

GPS::Magellan::Message - Module encapsulating Magellan (NMEA) messages

=head1 SYNOPSIS

=cut

=head1 DESCRIPTION

This class is being used internally by the L<GPS::Magellan> class.

=head1 METHODS

=over 4

=cut

=item new ( )


=cut


=back 4

=head1 PREREQUISITES

L<>

=head1 AUTHOR

Peter Banik E<lt>peter@geospaces.netE<gt>

=head1 SEE ALSO

L<GPS::Magellan>

=head1 VERSION

$Id: File.pm,v 1.1.1.1 2004/02/29 21:45:16 peter Exp $

=head1 BUGS

Please report bugs to the author.

=head1 COPYRIGHT

Copyright (c) 1993 - 2003 

=cut