import { Injectable, Logger, OnModuleDestroy, OnModuleInit } from '@nestjs/common';
import { PinService } from './pin.service';
import { ProfileService } from './profile.service';

const INTERVAL_MS = 5 * 60 * 1000;

@Injectable()
export class MaintenanceSchedulerService implements OnModuleInit, OnModuleDestroy {
  private readonly logger = new Logger(MaintenanceSchedulerService.name);
  private timer?: NodeJS.Timeout;

  constructor(
    private readonly pin: PinService,
    private readonly profile: ProfileService
  ) {}

  onModuleInit() {
    this.timer = setInterval(() => {
      void this.runMaintenance();
    }, INTERVAL_MS);
    void this.runMaintenance();
  }

  onModuleDestroy() {
    if (this.timer) {
      clearInterval(this.timer);
    }
  }

  private async runMaintenance() {
    try {
      const pinResult = await this.pin.finalizeDuePinDeletions();
      if (pinResult.count > 0) {
        this.logger.log(`Окончательно удалено PIN-кодов: ${pinResult.count}`);
      }
    } catch (error) {
      this.logger.error(
        `Ошибка финализации удаления PIN: ${error instanceof Error ? error.message : error}`
      );
    }

    try {
      const accountResult = await this.profile.finalizeDueAccountDeletions();
      if (accountResult.count > 0) {
        this.logger.log(`Окончательно удалено аккаунтов: ${accountResult.count}`);
      }
    } catch (error) {
      this.logger.error(
        `Ошибка финализации удаления аккаунтов: ${error instanceof Error ? error.message : error}`
      );
    }
  }
}
