import {
    env,
    basePath,
    ORMSession,
    LocalFilesystem,
    LocalFilesystemConfig,
    RedisCache,
    CacheQueue,
    BusConnectorConfig, QueueConfig, SyncQueue
} from '@extollo/lib'
import {CORS} from '../http/middlewares/CORS.middleware'

export default {
    debug: env('DEBUG_MODE', false),

    forceSsl: env('SERVER_FORCE_SSL', false),

    chorus: {
        baseUrl: env('CHORUS_BASE_URL'),
        thread: {
            template: env('CHORUS_THREAD_TEMPLATE'),
            idPrefix: env('CHORUS_ID_PREFIX', 'c.'),
        },
    },

    outline: {
        apiUrl: env('OUTLINE_API_URL'),
        apiKey: env('OUTLINE_API_KEY'),
        markmarkDocumentId: env('OUTLINE_MM_DOCUMENT_ID'),
    },

    session: {
        /* The implementation of @extollo/lib.Session that serves as the session backend. */
        driver: ORMSession,
    },

    bus: {
        connectors: [
            {type: 'redis'},
        ] as BusConnectorConfig[],
    },

    queue: {
        driver: CacheQueue,
    } as QueueConfig,

    cache: {
        driver: RedisCache,
    },

    /*
     * Here, you can define various filesystem drivers that can be used in
     * your application to store/retrieve files.
     *
     * The key in the object is the 'name' of the filesystem as it will be
     * fetched in code. For example, if you have a `fubar: { ... }` item,
     * then you can retrieve that filesystem using the Files service like
     * so:
     *
     * files.getFilesystem('fubar')  // => Filesystem { ... }
     */
    filesystems: {
        default: {
            /* If true, this will serve as the default filesystem for modules in your application. */
            isDefault: true,

            /* The implementation of @extollo/lib.Filesystem that serves as the backend. */
            driver: LocalFilesystem,

            /* The config required by the filesystem driver. */
            config: {
                baseDir: basePath('..', 'uploads').toLocal,
            } as LocalFilesystemConfig,
        }
    },

    middleware: {
        global: {
            pre: [CORS],
        },
    },
}
