import { Injectable, Logger } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { AppDataSource } from 'config/database/database.config';
import * as os from 'os';

@Injectable()
export class AppService {
  private readonly logger = new Logger(AppService.name);
  private readonly startTime: number;
  private readonly congigService: ConfigService;

  constructor() {
    this.startTime = Date.now(); // Track when server started
    this.congigService = new ConfigService();
  }

  private formatUptime(): string {
    const uptimeInSeconds = process.uptime();
    const days = Math.floor(uptimeInSeconds / 86400);
    const hours = Math.floor((uptimeInSeconds % 86400) / 3600);
    const minutes = Math.floor((uptimeInSeconds % 3600) / 60);
    return `${days}d ${hours}h ${minutes}m`;
  }

  private async checkDatabaseHealth(): Promise<string> {
    try {
      await AppDataSource.query('SELECT 1'); // basic health query
      return 'ok';
    } catch (error) {
      this.logger.error('Database health check failed', error);
      return 'down';
    }
  }

  async getSystemStatus() {
    // Simulate database check (replace with real DB logic)
    const databaseStatus = await this.checkDatabaseHealth();

    return {
      service: this.congigService.get<string>('SERVICE_NAME') || 'DFUK API',
      version: this.congigService.get<string>('API_VERSION'),
      description: 'API for DFUK',
      status: 'operational',
      uptime: this.formatUptime(),
      health: {
        database: databaseStatus,
        server: 'ok',
        load: parseFloat(os.loadavg()[0].toFixed(2)), // 1-minute load average
      },
      documentation: 'https://cyberalertnepal.com/en/docs',
      links: {
        self: '/',
        privacyPolicy: this.congigService.get<string>('PRIVACY_POLICY_URL') || 'https://cyberalertnepal.com/en/docs/api/terms_condition',
      },
      contact: {
        name: this.congigService.get<string>('CONTACT_NAME') || 'API Support',
        email: this.congigService.get<string>('CONTACT_EMAIL') || 'info@cyberalertnepal.com',
        url: this.congigService.get<string>('CONTACT_URL') || 'https://cyberalertnepal.com/en/contact',
      },
      environment: this.congigService.get<string>('NODE_ENV') || 'development',
    };
  }
}
