# Loco configuration file documentation

# Application logging configuration
logger:
    # Enable or disable logging.
    enable: true
    # Enable pretty backtrace (sets RUST_BACKTRACE=1)
    pretty_backtrace: true
    # Log level, options: trace, debug, info, warn or error.
    level: debug
    # Define the logging format. options: compact, pretty or Json
    format: compact
    # By default the logger has filtering only logs that came from your code or logs that came from `loco` framework. to see all third party libraries
    # Uncomment the line below to override to see all third party libraries you can enable this config and override the logger filters.
    # override_filter: trace

# Web server configuration
server:
    # Port on which the server will listen. the server binding is 0.0.0.0:{PORT}
    port: 5001
    binding: "0.0.0.0"
    # The UI hostname or IP address that mailers will point to.
    host: '{{ get_env(name="HOST", default="localhost") }}'
    # Out of the box middleware configuration. to disable middleware you can changed the `enable` field to `false` of comment the middleware block
    middlewares:
        # Enable Etag cache header middleware
        etag:
            enable: true
        # Allows to limit the payload size request. payload that bigger than this file will blocked the request.
        limit_payload:
            # Enable/Disable the middleware.
            enable: true
            # the limit size. can be b,kb,kib,mb,mib,gb,gib
            body_limit: 5mb
        # Generating a unique request ID and enhancing logging with additional information such as the start and completion of request processing, latency, status code, and other request details.
        logger:
            # Enable/Disable the middleware.
            enable: true
        # when your code is panicked, the request still returns 500 status code.
        catch_panic:
            # Enable/Disable the middleware.
            enable: true
        # Timeout for incoming requests middleware. requests that take more time from the configuration will cute and 408 status code will returned.
        timeout_request:
            # Enable/Disable the middleware.
            enable: false
            # Duration time in milliseconds.
            timeout: 5000

        cors:
            enable: true
            # Set the value of the [`Access-Control-Allow-Origin`][mdn] header
            # allow_origins:
            #   - https://loco.rs
            # Set the value of the [`Access-Control-Allow-Headers`][mdn] header
            # allow_headers:
            # - Content-Type
            # Set the value of the [`Access-Control-Allow-Methods`][mdn] header
            # allow_methods:
            #   - POST
            # Set the value of the [`Access-Control-Max-Age`][mdn] header in seconds
            # max_age: 3600
        fallback:
            enable: false

# Worker Configuration
workers:
    # specifies the worker mode. Options:
    #   - BackgroundQueue - Workers operate asynchronously in the background, processing queued.
    #   - ForegroundBlocking - Workers operate in the foreground and block until tasks are completed.
    #   - BackgroundAsync - Workers operate asynchronously in the background, processing tasks with async capabilities.
    mode: BackgroundAsync

# Mailer Configuration.
mailer:
    # SMTP mailer configuration.
    smtp:
        # Enable/Disable smtp mailer.
        enable: true
        # SMTP server host. e.x localhost, smtp.gmail.com
        host: '{{ get_env(name="MAILER_HOST", default="localhost") }}'
        # SMTP server port
        port: 1025
        # Use secure connection (SSL/TLS).
        secure: false
        # auth:
        #   user:
        #   password:

# Database Configuration
database:
    # Database connection URI
    uri: '{{ get_env(name="DATABASE_URL", default="postgres://konobangu:konobangu@localhost:5432/konobangu") }}'
    # When enabled, the sql query will be logged.
    enable_logging: true
    # Set the timeout duration when acquiring a connection.
    connect_timeout: 500
    # Set the idle duration before closing a connection.
    idle_timeout: 500
    # Minimum number of connections for a pool.
    min_connections: 1
    # Maximum number of connections for a pool.
    max_connections: 1
    # Run migration up when application loaded
    auto_migrate: true
    # Truncate database when application loaded. This is a dangerous operation, make sure that you using this flag only on dev environments or test mode
    dangerously_truncate: false
    # Recreating schema when application loaded.  This is a dangerous operation, make sure that you using this flag only on dev environments or test mode
    dangerously_recreate: false

# Redis Configuration
redis:
    # Redis connection URI
    uri: '{{ get_env(name="REDIS_URL", default="redis://localhost:6379") }}'
    # Dangerously flush all data in Redis on startup. dangerous operation, make sure that you using this flag only on dev environments or test mode
    dangerously_flush: false

settings:
    dal:
        data_dir: '{{ get_env(name="DAL_DATA_DIR", default="./data") }}'

    mikan:
        base_url: "https://mikanani.me/"
        http_client:
            exponential_backoff_max_retries: 3
            leaky_bucket_max_tokens: 2
            leaky_bucket_initial_tokens: 0
            leaky_bucket_refill_tokens: 1
            leaky_bucket_refill_interval: 500

    auth:
        auth_type: '{{ get_env(name="AUTH_TYPE", default = "basic") }}'
        basic_user: '{{ get_env(name="BASIC_USER", default = "konobangu") }}'
        basic_password: '{{ get_env(name="BASIC_PASSWORD", default = "konobangu") }}'
        oidc_issuer: '{{ get_env(name="OIDC_ISSUER", default = "") }}'
        oidc_audience: '{{ get_env(name="OIDC_AUDIENCE", default = "") }}'
        oidc_client_id: '{{ get_env(name="OIDC_CLIENT_ID", default = "") }}'
        oidc_client_secret: '{{ get_env(name="OIDC_CLIENT_SECRET", default = "") }}'
        oidc_extra_scopes: '{{ get_env(name="OIDC_EXTRA_SCOPES", default = "") }}'
        oidc_extra_claim_key: '{{ get_env(name="OIDC_EXTRA_CLAIM_KEY", default = "") }}'
        oidc_extra_claim_value: '{{ get_env(name="OIDC_EXTRA_CLAIM_VALUE", default = "") }}'

    graphql:
        depth_limit: null
        complexity_limit: null
