use Mojo::Base -strict;
use Test::More;
use Test::Mojo;
use Mojo::File qw/path/;
use Data::Dumper;


#####################
# Start Fake server #
#####################
my $mount_point = '/realapi/';
$ENV{KALAMAR_API} = $mount_point;

my $t = Test::Mojo->new('Kalamar' => {
  Kalamar => {
    plugins => ['Auth'],
    experimental_proxy => 1,
    proxy_inactivity_timeout => 99,
    proxy_connect_timeout => 66,
  }
});

# Mount fake backend
# Get the fixture path
my $fixtures_path = path(Mojo::File->new(__FILE__)->dirname, 'server');
my $fake_backend = $t->app->plugin(
  Mount => {
    $mount_point =>
      $fixtures_path->child('mock.pl')
  }
);
# Configure fake backend
my $fake_app = $fake_backend->pattern->defaults->{app};
$fake_app->log($t->app->log);

# Globally set server
$t->app->ua->server->app($t->app);

my $rendered = 0;
$t->app->hook(
  after_render => sub {
    $rendered++;
  }
);

$t->get_ok('/doc')
  ->status_is(200)
  ->text_like('title', qr!KorAP!)
  ;

is($rendered, 1);

$t->get_ok('/realapi/v1.0')
  ->status_is(200)
  ->content_is('Fake server available')
  ;

is($rendered, 1);

$t->get_ok('/api/v1.0/')
  ->status_is(200)
  ->content_is('Fake server available')
  ;

# Proxy renders
is($rendered, 2);

$t->get_ok('/api/v1.0/search?ql=cosmas3')
  ->status_is(400)
  ->json_is('/errors/0/0','307')
  ->header_is('connection', 'close')
  ;

# Proxy renders
is($rendered, 3);

$t->post_ok('/api/v1.0/oauth2/token' => {} => form => {
  username => 'test',
  password => 'pass'
})
  ->status_is(400)
  ->json_is('/errors/0/1','Grant Type unknown')
  ;

$t->post_ok('/api/v1.0/oauth2/token' => {} => form => {
  grant_type => 'password',
  client_id => 2,
  client_secret => 'k414m4r-s3cr3t',
  username => 'test',
  password => 'pass'
})
  ->status_is(200)
  ->json_is('/token_type', 'Bearer')
  ;

# Create long-running route
$fake_app->routes->get('/v1.0/longwait')->to(
  cb => sub {
    my $c = shift;

    $c->render_later;
    Mojo::IOLoop->timer(
      5 => sub {
        return $c->render(text => 'okay');
      }
    );
  });

# Set proxy timeout
is($t->app->ua->inactivity_timeout, 99);
is($t->app->ua->connect_timeout, 66);

# Set proxy timeout
$t->app->ua->inactivity_timeout(1);

$t->get_ok('/api/v1.0/longwait')
  ->status_is(400)
  ->content_is('Proxy error: Inactivity timeout')
  ;

$t->get_ok('/api/v1.0/redirect-target-a')
  ->status_is(200)
  ->content_is('Redirect Target!')
  ;

$t->get_ok('/api/v1.0/redirect')
  ->status_is(308)
  ->content_is('')
  ;

$t->ua->max_redirects(2);

$t->get_ok('/api/v1.0/redirect')
  ->status_is(200)
  ->content_is('Redirect Target!')
  ;

done_testing;
__END__
