import { ApiResponse } from '@goodgo/types';
import { Request, Response } from 'express';

import { prisma } from '../../config/database.config';

/**
 * EN: Controller for health checks
 * VI: Controller cho các kiểm tra sức khỏe hệ thống
 */
export class HealthController {
  /**
   * EN: Basic liveness probe
   * VI: Kiểm tra liveness cơ bản
   */
  health = async (_req: Request, res: Response): Promise<void> => {
    const response: ApiResponse<{ status: string; timestamp: string }> = {
      success: true,
      data: {
        status: 'ok',
        timestamp: new Date().toISOString(),
      },
      timestamp: new Date().toISOString(),
    };

    res.json(response);
  };

  /**
   * EN: Readiness probe (checks database connection)
   * VI: Kiểm tra readiness (kiểm tra kết nối database)
   */
  ready = async (_req: Request, res: Response): Promise<void> => {
    try {
      // EN: Check database connection
      // VI: Kiểm tra kết nối database
      await prisma.$queryRaw`SELECT 1`;
      res.json({
        success: true,
        data: { status: 'ready' },
        timestamp: new Date().toISOString(),
      });
    } catch {
      // EN: Return 503 if database is not ready
      // VI: Trả về 503 nếu database chưa sẵn sàng
      res.status(503).json({
        success: false,
        error: {
          code: 'HEALTH_001',
          message: 'Service not ready',
        },
        timestamp: new Date().toISOString(),
      });
    }
  };

  /**
   * EN: Alias for health check
   * VI: Alias cho kiểm tra sức khỏe
   */
  live = async (_req: Request, res: Response): Promise<void> => {
    res.json({
      success: true,
      data: { status: 'live' },
      timestamp: new Date().toISOString(),
    });
  };
}
