import { Controller, Get, ServiceUnavailableException } from '@nestjs/common';
import { firstValueFrom } from 'rxjs';
import { CoreGrpcService } from '../core-grpc.service';

@Controller('health')
export class HealthController {
  constructor(private readonly core: CoreGrpcService) {}

  // Liveness-проба. ВАЖНО: проверяет только то, что HTTP-сервер api-gateway
  // поднят, и НЕ зависит от sso-core. Иначе временная недоступность gRPC
  // помечает весь api-gateway как unhealthy в Docker healthcheck, что роняет
  // зависимые сервисы и приводит к 502 на всех /idp-api/* маршрутах.
  @Get()
  check() {
    return { status: 'ok', service: 'api-gateway' };
  }

  // Readiness/диагностика связи с sso-core по gRPC.
  // НЕ используется в Docker healthcheck, чтобы сбой sso-core не каскадил.
  @Get('ready')
  async ready() {
    try {
      await firstValueFrom(this.core.settings.GetSetting({ key: 'PROJECT_NAME' }));
      return { status: 'ok', service: 'api-gateway', grpc: 'ok' };
    } catch {
      throw new ServiceUnavailableException({
        status: 'error',
        service: 'api-gateway',
        grpc: 'unavailable',
        message: 'Не удалось связаться с sso-core по gRPC'
      });
    }
  }
}
