import {DynamicModule, Module} from '@nestjs/common';

import {ScyllaModuleOptions, ScyllaModuleAsyncOptions, ScyllaFeaturesModuleOptions} from './interfaces';
import {createScyllaProviders} from './scylla.providers';
import {ScyllaCoreModule} from './scylla-core.module';

@Module({})
export class ScyllaModule {
    static forRoot(options: ScyllaModuleOptions): DynamicModule {
        return {
            module: ScyllaModule,
            imports: [ScyllaCoreModule.forRoot(options)],
            global: options.isGlobal,
        };
    }

    static forFeature(options: ScyllaFeaturesModuleOptions): DynamicModule {
        const providers = createScyllaProviders(options.entities || [], options.connection || 'default');
        return {
            module: ScyllaModule,
            exports: providers,
            providers,
            global: options.isGlobal,
        };
    }

    static forRootAsync(options: ScyllaModuleAsyncOptions): DynamicModule {
        return {
            module: ScyllaModule,
            global: options.isGlobal,
            imports: [ScyllaCoreModule.forRootAsync(options)],
        };
    }
}
