import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { CacheModule } from '@nestjs/cache-manager';
import { AuthModule } from './modules/auth/auth.module';
import { UsersModule } from './modules/users/users.module';
import { GroupsModule } from './modules/groups/groups.module';
import { FeedsModule } from './modules/feeds/feeds.module';
import { MessagesModule } from './modules/messages/messages.module';
import { NotificationsModule } from './modules/notifications/notifications.module';
import { MediaModule } from './modules/media/media.module';
import { AdminModule } from './modules/admin/admin.module';
import { PrismaModule } from './prisma/prisma.module';

@Module({
  imports: [
    ConfigModule.forRoot({ isGlobal: true }),
    CacheModule.registerAsync({
      isGlobal: true,
      inject: [ConfigService],
      useFactory: async (config: ConfigService) => {
        const redisUrl = config.get<string>('REDIS_URL');
        if (redisUrl) {
          const { redisStore } = await import('cache-manager-redis-yet');
          return { store: await redisStore({ url: redisUrl }), ttl: 60_000 };
        }
        // In-memory fallback for local dev without Redis
        return { ttl: 60_000 };
      },
    }),
    PrismaModule,
    AuthModule,
    UsersModule,
    GroupsModule,
    FeedsModule,
    MessagesModule,
    NotificationsModule,
    MediaModule,
    AdminModule,
  ],
})
export class AppModule {}
