import { Module } from "@nestjs/common";
import { TypeOrmModule } from "@nestjs/typeorm";

import { BackofficeModule } from "../backoffice/backoffice.module";
import { CompaniesModule } from "../companies/companies.module";
import { FilesModule } from "../files/files.module";
import { NotificationInboxModule } from "../notification-inbox/notification-inbox.module";
import { SupportConversation } from "./entities/support-conversation.entity";
import { SupportMessage } from "./entities/support-message.entity";
import { SupportAttachmentController } from "./support-attachment.controller";
import { SupportChatAgentController } from "./support-chat-agent.controller";
import { SupportChatController } from "./support-chat.controller";
import { SupportChatGateway } from "./support-chat.gateway";
import { SupportChatService } from "./support-chat.service";
import { SupportConversationRepository } from "./support-conversation.repository";
import { SupportMessageRepository } from "./support-message.repository";

@Module({
  imports: [
    TypeOrmModule.forFeature([SupportConversation, SupportMessage]),
    // ExternalProfileRepository — company lookup + ownership checks.
    // CompaniesService — resolve the company an agent opens a thread with.
    CompaniesModule,
    // BackofficeService.getAllCurrentEmployeeUserIds — staff room membership.
    BackofficeModule,
    // WsAuthService — reused handshake authentication for the gateway.
    NotificationInboxModule,
    // FilesService — chat attachments are stored as polymorphic file records.
    FilesModule,
  ],
  controllers: [
    SupportChatController,
    SupportChatAgentController,
    SupportAttachmentController,
  ],
  providers: [
    SupportConversationRepository,
    SupportMessageRepository,
    SupportChatGateway,
    SupportChatService,
  ],
  // FilesController's ownership check for `support_message` files defers to this
  // service — see SupportAttachmentAccess.
  exports: [SupportChatService],
})
export class SupportChatModule {}
