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


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

my $t = Test::Mojo->new('Kalamar' => {
  Kalamar => {
    defaults => {
      match_info_extended => 'max'
    }
  }
});

# 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
$fake_backend->pattern->defaults->{app}->log($t->app->log);

# The config is exposed on rendered pages
$t->get_ok('/')
  ->status_is(200)
  ->element_exists('body[data-match-info-extended="max"]')
  ;

# Query passed
$t->get_ok('/corpus/WPD15/232/39681/p2133-2134?spans=false&foundry=*&_format=json')
  ->status_is(200)
  ->content_type_is('application/json;charset=UTF-8')
  ->json_is('/textSigle', 'WPD15/232/39681')
  ->json_like('/snippet', qr!<span class=\"context-left\">!)
  ->header_isnt('X-Kalamar-Cache', 'true')
  ;

$t->get_ok('/corpus/GOE/AGF/02286/p75682-75683?_format=json&response-pipe=glemm')
  ->status_is(200)
  ->json_is('/textSigle', 'GOE/AGF/02286')
  ->json_is('/title','Materialien zur Geschichte der Farbenlehre')
  ->json_is('/meta/responsePipes','glemm')
  ;

# Extended match-info request is accepted and forwarded
$t->get_ok('/corpus/GOE/AGF/02286/p75682-75683?extended=max&_format=json')
  ->status_is(200)
  ->json_is('/textSigle', 'GOE/AGF/02286')
  ;

# TODO:
#   It's surprising, that it doesn't return a 404!
$t->get_ok('/corpus/notfound/X/X/p0-1?_format=json')
  ->status_is(200)
  ->json_is('/textSigle', 'NOTFOUND/X/X')
  ->json_is('/corpusID', undef)
  ;

$t->get_ok('/corpus/fail/x/x/p0-0?_format=json')
  ->status_is(400)
  ->json_is('/notifications/0/0', 'error')
  ->json_like('/notifications/0/1', qr!Unable to load query response from .+?response_matchinfo_fail_x_x_p0-0\.json!)
  ;

# TODO:
#   Should probably return a 4xx!
$t->get_ok('/corpus/GOE/AGF/02286/p-2-0?_format=json')
  ->status_is(400)
  ->json_is('/notifications/0/0', 'error')
  ->json_is('/notifications/0/1', '730: Invalid match identifier')
  ;

$t->get_ok('/corpus/notfound2/X/X/p0-1?_format=json')
  ->status_is(404)
  ->json_is('/notifications/0/0', 'error')
  ->json_is('/notifications/0/1', '404: Not Found')
  ;

$t->get_ok('/corpus/brokenerr/X/X/p0-1?_format=json')
  ->status_is(409)
  ->json_is('/notifications/0/0', 'error')
  ->json_is('/notifications/0/1', 'Message structure failed')
  ;

$t->get_ok('/corpus/brokenwarn/X/X/p0-1?_format=json')
  ->status_is(200)
  ->json_is('/notifications/0/0', 'warn')
  ->json_is('/notifications/0/1', '1: Warning 1')
  ->json_is('/notifications/1/0', 'error')
  ->json_is('/notifications/1/1', 'Message structure failed')
  ;

$t->get_ok('/corpus/brokenerr2/X/X/p0-1?_format=json')
  ->status_is(417)
  ->json_is('/notifications/0/0', 'error')
  ->json_is('/notifications/0/1', 'Message structure failed')
  ;

# Get from cache
$t->get_ok('/corpus/WPD15/232/39681/p2133-2134?spans=false&foundry=*&_format=json')
  ->status_is(200)
  ->json_is('/textSigle', 'WPD15/232/39681')
  ->json_like('/snippet', qr!<span class=\"context-left\">!)
  ->header_is('X-Kalamar-Cache', 'true')
  ;

# Check for validation error
$t->get_ok('/corpus/WPD15/232/39681/p2133-2134?spans=no&_format=json')
  ->status_is(400)
  ->json_is('/notifications/0/1', 'Parameter "spans" invalid')
  ;

$t->get_ok('/corpus/WPD15/232/39681/p2133-2134?spans=no&_format=html')
  ->content_type_is('text/html;charset=UTF-8')
  ->status_is(400)
  ->text_is('p.no-results', 'Unable to perform the action.')
  ->text_is('div.notify', 'Parameter "spans" invalid')
  ;

$t->get_ok('/corpus/WPD15/232/39681/p2133-2134?spans=no')
  ->content_type_is('text/html;charset=UTF-8')
  ->status_is(400)
  ->text_is('p.no-results', 'Unable to perform the action.')
  ->text_is('div.notify', 'Parameter "spans" invalid')
  ;

$t->get_ok('/corpus/WPD15/232/39681/p2133-2134?spans=no')
  ->content_type_is('text/html;charset=UTF-8')
  ->status_is(400)
  ->text_is('p.no-results', 'Unable to perform the action.')
  ->text_is('div.notify', 'Parameter "spans" invalid')
  ;


done_testing;
__END__
