package HTTP::Engine::Middleware::DebugRequest;
use HTTP::Engine::Middleware;
use Text::SimpleTable;

with 'HTTP::Engine::Middleware::Role::Logger';

before_handle {
    my ( $c, $self, $req ) = @_;
    $self->report_request_info($req);
    $req;
};

sub report_request_info {
    my ( $self, $request ) = @_;
    $self->report_request_basic_info($request);
    $self->report_params($request);
}

sub report_params {
    my ( $self, $req ) = @_;
    if ( keys %{ $req->parameters } ) {
        my $t
            = Text::SimpleTable->new( [ 20, 'Parameter' ], [ 36, 'Value' ] );
        for my $key ( sort keys %{ $req->parameters } ) {
            my $param = $req->parameters->{$key};
            my $value = defined($param) ? $param : '';
            $t->row( $key,
                ref $value eq 'ARRAY' ? ( join ', ', @$value ) : $value );
        }
        my $message = "Parameters: \n" . $t->draw;
        $self->log( $message );
    }
}

sub report_request_basic_info {
    my ( $self, $req ) = @_;
    my $t = Text::SimpleTable->new(
        [ 40, 'Path' ],
        [ 8,  'Method' ],
        [ 30, 'Base' ]
    );
    $t->row( $req->path, $req->method, $req->base );
    my $message = "Matching Info:\n" . $t->draw;
    $self->log( $message );
}

__MIDDLEWARE__

__END__

=head1 NAME

HTTP::Engine::Middleware::DebugRequest - dump request

=head1 SYNOPSIS

    my $mw = HTTP::Engine::Middleware->new;
    $mw->install( 'HTTP::Engine::Middleware::DebugRequest' => {
        logger => sub {
            warn @_;
        },
    });
    HTTP::Engine->new(
        interface => {
            module => 'YourFavoriteInterfaceHere',
            request_handler => $mw->handler( \&handler ),
        }
    )->run();

=head1 DESCRIPTION

This middleware prints request info like Catalyst.

=head1 AUTHOR

dann

=head1 SEE ALSO

L<HTTP::Engine::Middleware>