import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { AuthModule } from './auth/auth.module';
import { EnrollmentsModule } from './enrollments/enrollments.module';
import { CoursesModule } from './course/courses.module';
import { LessonsModule } from './lessons/lessons.module';
import { StepsModule } from './steps/steps.module';
import { Course } from './course/course.entity';
import { CourseFeedback } from './feedback/course-feedback.entity';
import { ContactMessage } from './contact/contact-message.entity';
import { CourseProgress } from './progress/course-progress.entity';
import { BillingModule } from './billing/billing.module';
import { Enrollment } from './enrollments/enrollment.entity';
import { User } from './users/user.entity';
import { Lesson } from './lessons/lesson.entity';
import { Step } from './steps/step.entity';
import { AuthnpmController } from './run/authnpm/authnpm.controller';
import { ConfigModule, ConfigService } from '@nestjs/config';
import * as Joi from 'joi';
import { FeedbackModule } from './feedback/feedback.module';
import { TrainerModule } from './trainer/trainer.module';
import { ContactModule } from './contact/contact.module';
import { MailModule } from './mail/mail.module';

@Module({
  imports: [
    // PostgreSQL Connection
    // TypeOrmModule.forRoot({
    //   type: 'postgres',
    //   host: '185.199.52.174',       // change if using VPS/remote DB
    //   port: 5432,
    //   username: 'talented_user',    // your postgres username
    //   password: 'Qwertyui',// your postgres password
    //   database: 'trytalento', // your DB name
    //   entities: [User, Course, Lesson, Step, Enrollment, CourseProgress, CourseFeedback,ContactMessage],        // load entities here
    //   synchronize: true,// auto-create tables (⚠️ dev only)
    // }),
    TypeOrmModule.forRootAsync({
      imports: [ConfigModule],
      inject: [ConfigService],
      useFactory: (config: ConfigService) => ({
        type: config.get<'postgres'>('DB_TYPE'),
        host: config.get<string>('DB_HOST'),
        port: config.get<number>('DB_PORT'),
        username: config.get<string>('DB_USERNAME'),
        password: config.get<string>('DB_PASSWORD'),
        database: config.get<string>('DB_DATABASE'),
        entities: [
          User,
          Course,
          Lesson,
          Step,
          Enrollment,
          CourseProgress,
          CourseFeedback,
          ContactMessage,
        ],
        synchronize: true, // ⚠️ dev only
      }),
    }),
    ConfigModule.forRoot({
      isGlobal: true, // makes config available everywhere
      validationSchema: Joi.object({
        STRIPE_SECRET: Joi.string().required(),
        STRIPE_WEBHOOK_SECRET: Joi.string().required(),
        APP_BASE_URL: Joi.string().uri().required(),
        CURRENCY: Joi.string().default('aed'),
      }),
    }),
    LessonsModule,
    StepsModule,
    CoursesModule,
    AuthModule,
    EnrollmentsModule,
    BillingModule,
    FeedbackModule,
    TrainerModule,
    ContactModule,
    MailModule
  ],
  controllers: [AppController, AuthnpmController],
  providers: [AppService],
})
export class AppModule { }
