The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Chart::OFC2::Scatter;

=head1 NAME

Chart::OFC2::Scatter - OFC2 Scatter chart

=head1 DESCRIPTION

	extends 'Chart::OFC2::Element';

=cut

use Moose;
use MooseX::StrictConstructor;

our $VERSION = '0.05';

extends 'Chart::OFC2::Element';

=head1 PROPERTIES

	has '+type_name' => (default => 'scatter');

=cut

has '+type_name'    => (default => 'scatter');
has '+use_extremes' => (default => 1);    # scatter needs x-y min-maxes to print
has '+extremes'     => (default => sub { $_[0]->set_extremes }, lazy => 1 );    # scatter needs x-y min-maxes to print


=head1 METHODS

=head2 set_extremes()

Set the chart element extremes.

=cut

sub set_extremes {
    my ($self) = @_;
    my $extremes = {
        'x_axis_max' => undef,
        'x_axis_min' => undef,
        'y_axis_max' => undef,
        'y_axis_min' => undef,
        'other'      => undef
    };
    for (@{ $self->values }) {
        $extremes->{'y_axis_max'} = $_->{'y'} if !defined($extremes->{'y_axis_max'});
        if ($_->{'y'} > $extremes->{'y_axis_max'}) {
            $extremes->{'y_axis_max'} = $_->{'y'};
        }
        $extremes->{'y_axis_min'} = $_->{'y'} if !defined($extremes->{'y_axis_min'});
        if ($_->{'y'} < $extremes->{'y_axis_min'}) {
            $extremes->{'y_axis_min'} = $_->{'y'};
        }

        $extremes->{'x_axis_max'} = $_->{'x'} if !defined($extremes->{'x_axis_max'});
        if ($_->{'x'} > $extremes->{'x_axis_max'}) {
            $extremes->{'x_axis_max'} = $_->{'x'};
        }
        $extremes->{'x_axis_min'} = $_->{'x'} if !defined($extremes->{'x_axis_min'});
        if ($_->{'x'} < $extremes->{'x_axis_min'}) {
            $extremes->{'x_axis_min'} = $_->{'x'};
        }

    }
    $self->extremes(Chart::OFC2::Extremes->new($extremes));
}

1;