import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { JwtModule } from '@nestjs/jwt';
import { PrismaModule } from '@core/database/prisma/prisma.module';

// Security
import { SecurityModule } from './security/security.module';

// LLM
import { LLMModule } from './llm/llm.module';

// Controllers
import { ChatController } from './chat/chat.controller';
import { FeedbackController } from './feedback/feedback.controller';
import { TicketController } from './ticket/ticket.controller';
import { KnowledgeController } from './knowledge/knowledge.controller';
import { PromptController } from './prompt/prompt.controller';
import { AIConfigController } from './config/config.controller';
import { StatsController } from './stats/stats.controller';

// Services
import { ChatService } from './chat/chat.service';
import { FeedbackService } from './feedback/feedback.service';
import { TicketService } from './ticket/ticket.service';
import { KnowledgeService } from './knowledge/knowledge.service';
import { PromptService } from './prompt/prompt.service';
import { AIConfigService } from './config/config.service';
import { StatsService } from './stats/stats.service';

@Module({
  imports: [
    ConfigModule,
    PrismaModule,
    JwtModule.registerAsync({
      imports: [ConfigModule],
      inject: [ConfigService],
      useFactory: (configService: ConfigService) => {
        const accessTtl = configService.get<string>('jwt.accessTtl') || '30d';
        return {
          secret: configService.get<string>('jwt.secret') || 'default-secret-key',
          signOptions: {
            expiresIn: accessTtl as any,
          },
        };
      },
    }),
    SecurityModule,
    LLMModule,
  ],
  controllers: [
    ChatController,
    FeedbackController,
    TicketController,
    KnowledgeController,
    PromptController,
    AIConfigController,
    StatsController,
  ],
  providers: [
    ChatService,
    FeedbackService,
    TicketService,
    KnowledgeService,
    PromptService,
    AIConfigService,
    StatsService,
  ],
  exports: [
    ChatService,
    FeedbackService,
    TicketService,
    KnowledgeService,
    PromptService,
    AIConfigService,
    StatsService,
  ],
})
export class AIAssistantModule {}
