# Based on Mojolicious::Plugin::Number::Commify
my $THOUSAND_SEP_RE = qr/(
  ^[-+]?           # beginning of number.
  \d+?             # first digits before first comma
  (?=              # followed by, (but not included in the match) :
    (?>(?:\d{3})+) # some positive multiple of three digits.
    (?!\d)         # an *exact* multiple, not x * 3 + 1 or whatever.
  )|               # or:
  \G\d{3}          # after the last group, get three digits
  (?=\d)           # but they have to have more digits after them.
)/x;

{
  Kalamar => {
    'api-0.1' => 'http://10.0.10.13:7070/api/v0.1/'
  },
  Notifications => {
    Alertify => {
      base_timeout => 10_000
    },
    JSON => 1
  },
  Search => {
    engine => 'Kalamar::API',
    api => 'http://10.0.10.13:7070/api/v0.1/'
  },
  CHI => {
    default => {
      driver => 'FastMmap',
      root_dir => app->home . '/cache/data',
      cache_size => '12m'
    }
  },
  hypnotoad => {
    listen => ['http://*:6666', 'http://*:5555'],
    workers => 5,
    inactivity_timeout => 120,
    proxy => 1
  },
  'TagHelpers-Pagination' => {
    prev      => '<span><span>&lt;</span></span>',
    next      => '<span><span>&lt;</span></span>',
    ellipsis  => '<a class="ellipsis"><span><span>...</span></span></a>',
    separator => '',
    current   => '<span>{current}</span>',
    page      => '<span>{page}</span>'
  },
  Localize => {
    dict => {
      _ => sub { $_->locale },
      de => {
        numf => sub {
	  shift;
	  my %val = @_;
	  my $num = $val{number} or return 0;
	  $num =~ s/$THOUSAND_SEP_RE/$1\./g;
	  return $num;
        },
	about => 'Über KorAP',
	login => 'Anmelden',
	searchtitle => 'KorAP: Finde "<%= $q %>" (<%= $ql %>)',
	searchplaceholder => 'Finde ...',
	go => 'Los!',
	in => 'in',
	by => 'von',
	with => 'mit',
	glimpse => 'Stichprobe',
	faq => 'Häufige Fragen',
	tutorial => 'Einführung',
	pubOn => 'veröffentlicht am',
	matchCount => 'Treffer',
	noMatches => 'Es wurden keine Treffer für <code><%= stash("q") %></code> gefunden.',
	jsFile => 'kalamar-<%= $Kalamar::VERSION %>-en.js',
	korap => {
	  -short => 'KorAP',
	  desc => 'KorAP - Korpusanalyseplattform der nächsten Generation',
	  overview => 'KorAP - Übersicht',
	},
	template => {
	  intro => 'de/intro'
	}
      },
      -en => {
        numf => sub {
	  shift;
	  my %val = @_;
	  my $num = $val{number} or return 0;
	  $num =~ s/$THOUSAND_SEP_RE/$1\,/g;
	  return $num;
        },
	about => 'About KorAP',
	login => 'Login',
	go => 'Go!',
	searchtitle => 'KorAP: Find "<%= $q %>" (<%= $ql %>)',
	searchplaceholder => 'Find ...',
	in => 'in',
	by => 'by',
	with => 'with',
	pubOn => 'published on',
	matchCount => '<%= num($found, "match", "matches") %>',
	noMatches => 'There were no matches for <code><%= stash("q") %></code>.',
	glimpse => 'Sample',
	faq => 'F.A.Q.',
	tutorial => 'Tutorial',
	jsFile => 'kalamar-<%= $Kalamar::VERSION %>-en.js',
	korap => {
	  -short => 'KorAP',
	  desc => 'KorAP - Corpus Analysis Platform',
	  overview => 'KorAP - Overview'
	}
      }
    }
  },
  MailException => {
    from => 'korap@ids-mannheim.de',
    to => 'diewald@ids-mannheim.de',
    subject => '[KorAP] Testbed crashed'
  }
}
