package Mojolicious::Plugin::RoutesAuthDBI::Log;
use Mojo::Base -base;#'Mojolicious::Plugin::Authentication'
use Mojolicious::Plugin::RoutesAuthDBI::Util qw(json_enc json_dec);
use Mojo::Util qw(decode url_unescape);

#~ use constant  PKG => __PACKAGE__;

has [qw(app plugin)], undef, weak=>1;
has qw(model);

has hook => sub {
  my $self = shift;
  $self->app->hook("after_dispatch" => sub {
    $self->log(shift);
  });
  
};

sub new {
  state $self = shift->SUPER::new(@_);
  #~ $self->app->hook("before_dispatch" => sub {
    #~ my $c = shift;
    #~ $c->timing->begin(PKG);
  #~ });
  $self->hook();
}

sub log {
  my ($self, $c) = @_;
  my $conf = $self->plugin->merge_conf;
  
  return
    if $conf->{log}{skip_static} && $c->stash->{'mojo.static'};
  
  my $auth_helper = $conf->{auth}{current_user_fn};
  my $u = $c->$auth_helper || ($self->plugin->guest && $self->plugin->guest->current($c))
    or return;
  my $route = $c->match->endpoint ||  {'non_static_url'=>$c->req->url->to_string};#$c->req->url->path->to_route or return;
  my $route_id = $route->{'Mojolicious::Plugin::RoutesAuthDBI'} && $route->{'Mojolicious::Plugin::RoutesAuthDBI'}{route} && $route->{'Mojolicious::Plugin::RoutesAuthDBI'}{route}{id};
  #~ my $elapsed = $c->timing->elapsed(PKG);
  my $elapsed = $c->timing->elapsed('mojo.timer')
    or return;# не будет для статики
  #~ $c->app->log->debug(sprintf "%s elapsed:%s`s", ($route_id || decode('UTF-8', url_unescape($route->{non_static_url} || '/')), $elapsed)#join(', ', sort keys %$route_db)
  $self->model->log(user_id=>$u->{id}, route_id=>$route_id, url=>$route_id ? undef : decode('UTF-8', url_unescape($route->{non_static_url} || '/')), status=>$c->res->code, elapsed=>$elapsed)
    if $route_id || $route->{non_static_url};# без статики
  
}



1;

=pod

=encoding utf8

Доброго всем


=head1 Mojolicious::Plugin::RoutesAuthDBI::Log

¡ ¡ ¡ ALL GLORY TO GLORIA ! ! !

=head1 NAME

Mojolicious::Plugin::RoutesAuthDBI::Log - store log in DBI table.

=head1 SYNOPSIS

    $app->plugin('RoutesAuthDBI', 
        ...
        log => {< hashref options list below >},
        ...
    );

=head1 OPTIONS

=head2 namespace

String, default to 'Mojolicious::Plugin::RoutesAuthDBI'.

=head2 module

String, default to 'Guest' (this module).

=head2 disabled

Boolean, disable logging.

=head2 skip_static

Boolean. True then log non-static routes only. Default false.

=head2 tables

Hashref, any DB tables names. See L<Mojolicious::Plugin::RoutesAuthDBI::Schema#Default-variables-for-SQL-templates>.

=head2 table

String, DB table B<logs> name. See L<Mojolicious::Plugin::RoutesAuthDBI::Schema#Default-variables-for-SQL-templates>.


=head1 METHODS

=head2 new

Apply logging into DBI table by "after_dispatch" hook


=head1 SEE ALSO

L<Mojolicious::Plugin::RoutesAuthDBI>

=head1 AUTHOR

Михаил Че (Mikhail Che), C<< <mche [on] cpan.org> >>

=head1 BUGS / CONTRIBUTING

Please report any bugs or feature requests at L<https://github.com/mche/Mojolicious-Plugin-RoutesAuthDBI/issues>. Pull requests welcome also.

=head1 COPYRIGHT

Copyright 2018+ Mikhail Che.

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.

=cut
