import { DynamicModule, Module, Provider } from '@nestjs/common'
import { AuthGuard } from './guards'
import { AuthStrategyFactory, GoogleBookingServerAuthStrategy, JWTAuthStrategy } from './strategy'
import { AuthModuleOptions, OPTIONS_KEY } from './types'

@Module({})
export class AuthModule {
	static forRoot(options: AuthModuleOptions): DynamicModule {
		const providers: Provider[] = [
			AuthGuard,
			AuthStrategyFactory,
			JWTAuthStrategy,
			GoogleBookingServerAuthStrategy,
			{ provide: OPTIONS_KEY, useValue: options },
		]

		return {
			module: AuthModule,
			global: true,
			providers,
			exports: [AuthGuard, AuthStrategyFactory],
		}
	}
}
