# This is the base configuration file for Kalamar.
# Further configurations can override these values.
# To define a new configuration, create a file in the
# root folder of your application with the name like
#
#   kalamar.[MYNAME].conf
#
# To load the configuration, start your applikation with
# the environment variable
#
#   MOJO_MODE=[MYNAME]
#
# Further typical configurations in this file include
#
# - hypnotoad
#    See Mojo::Server::Hypnotoad
# - MailException
#    See Mojolicious::Plugin::MailException
# - TagHelpers-Pagination
#    See Mojolicious::Plugin::TagHelpers::Pagination
# - Search
#    See Mojolicious::Plugin::Search
#

# The default Kustvakt api endpoint
my $api = 'http://localhost:9999/api/';
{
  Search => {
    engine => 'Kalamar::API',
    # Kustvakt server:
    api => $ENV{'KALAMAR_API'} // $api
  },
  Kalamar => {
    # Kustvakt server:
    api => $ENV{'KALAMAR_API'} // $api,

    # In case, the user management of Kustvakt
    # is used, make this a true value
    auth_support => 0,

    # The name of the base corpus,
    # for query examples (see kalamar.queries.dict)
    # examplecorpus => 'corola'
  },

  # See Mojolicious::Plugin::TagHelpers::MailToChiffre
  'TagHelpers-MailToChiffre' => {
    method_name => 'PArok',
    pattern_rotate => 673
  },

  # See Mojolicious::Plugin::CHI
  CHI => {
    default => {
      driver => 'FastMmap',
      root_dir => app->home . '/cache/data',
      cache_size => '100m',
      max_size => '100m'
    },
    user => {
      l1_cache => {
      	driver => 'FastMmap',
	      root_dir => app->home . '/cache/usermap',
        	cache_size => '50m',
	        max_size => '50m'
      },
      driver => 'File',
      root_dir => app->home . '/cache/userfile',
      max_key_length => 64,
      max_size => '500m'
    }
  }
}
