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

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