import { Injectable, OnModuleInit } from '@nestjs/common';
import { DataSource } from 'typeorm';
import { DbMetricsService } from './db-metrics.service';

@Injectable()
export class DbMetricsUpdater implements OnModuleInit {
    constructor(
        private readonly dataSource: DataSource,
        private readonly dbMetrics: DbMetricsService,
    ) { }

    onModuleInit() {
        this.update();

        // update every 10 seconds
        setInterval(() => this.update(), 10_000);
    }

    private update() {
        const job = process.env.SERVICE_NAME || 'HIMS-backend';

        // MySQL pool (typeorm + mysql2)
        const pool: any = (this.dataSource.driver as any).pool;

        if (!pool) return;

        const active =
            pool._allConnections?.length - pool._freeConnections?.length || 0;

        const idle = pool._freeConnections?.length || 0;

        this.dbMetrics.activeConnections.set({ job }, active);
        this.dbMetrics.idleConnections.set({ job }, idle);
    }
}
