import { Module } from '@nestjs/common';
import { LoggerModule } from 'nestjs-pino';
import { GrafanaProxyController } from './grafana-proxy.controller';
import { GrafanaProxyService } from './grafana-proxy.service';
import { GrafanaQueryService } from './grafana-query.service';
import { EverdigmMailController } from './everdigm-mail.controller';
import { EverdigmMailService } from './everdigm-mail.service';
import { LokiClient } from './loki-client.service';
import { WebhooksController } from './webhooks.controller';
import { WebhooksService } from './webhooks.service';
import { ZabbixClientService } from './zabbix-client.service';
import { ZabbixHostService } from './zabbix-host.service';
import { ZabbixMetricsService } from './zabbix-metrics.service';
import { ZabbixStatusService } from './zabbix-status.service';

@Module({
  imports: [
    LoggerModule.forRoot({
      pinoHttp: {
        autoLogging: true,
        quietReqLogger: false,
        transport: {
          // For production, remove transport and let pino log JSON to stdout.
          // Since we want strict JSON for Vector to parse, we'll remove 'pino-pretty' 
          // and log raw JSON.
          target: 'pino/file', 
          options: { destination: 1 } // stdout
        },
        customProps: (req, res) => ({
          context: 'HTTP',
        }),
      },
    }),
  ],
  controllers: [GrafanaProxyController, WebhooksController, EverdigmMailController],
  providers: [
    LokiClient,
    GrafanaProxyService,
    GrafanaQueryService,
    EverdigmMailService,
    WebhooksService,
    ZabbixClientService,
    ZabbixHostService,
    ZabbixMetricsService,
    ZabbixStatusService,
  ],
})
export class AppModule {}
