# 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 application 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
# - Localize
#     See Mojolicious::Plugin::Localize
# - TagHelpers-ContentBlock
#     See Mojolicious::Plugin::TagHelpers::ContentBlock

# 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 => 'dereko'
  },

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

  # See Mojolicious::Plugin::Piwik
  Piwik => {
    embed => 0
  },

  # 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'
    }
  }
}
