package P2;

use 5.20.0;
use warnings;

use List::AllUtils qw/ /;
use Math::Vector::Real;

require './part1.pm';

use Moose;
use MooseX::MungeHas 'is_rw';

extends 'P1';

use experimental qw/ signatures postderef /;

has +facing => sub { V(10,1) };

sub turn($self,$n) {
    my $f = $self->facing;
    my $d = ($n/90)%4;
    given( $d ) {
        return V($f->[1], -$f->[0]) when 1;
        return V(-$f->[0], -$f->[1]) when 2;
        return V(-$f->[1], $f->[0]) when 3;
    }
    return $f;
}

sub move($self,$m) {
    $m =~ /(.)(\d+)/;

    my ( $x, $c ) = ($1,$2);

    my $coords = $self->coords;
    my $facing = $self->facing;


    given($x) {
        $coords += $c * $self->facing when 'F';
        $facing += $c * $self->delta->[0] when 'N';
        $facing += $c * $self->delta->[1] when 'E';
        $facing += $c * $self->delta->[2] when 'S';
        $facing += $c * $self->delta->[3] when 'W';
        $facing = $self->turn($c) when 'R';
        $facing = $self->turn(-$c) when 'L';
    }

    $self->facing($facing);
    $self->coords($coords);

    warn $self->facing;
    warn $self->coords;
}

1;