<?php

namespace App\Shared\Controller;

use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Contracts\Cache\CacheInterface;

class HealthController
{
    public function __construct(
        private readonly EntityManagerInterface $em,
        private readonly CacheInterface $cache,
    ) {}

    #[Route('/health', methods: ['GET'])]
    public function __invoke(): JsonResponse
    {
        $checks = [];
        $status = 'ok';

        try {
            $this->em->getConnection()->executeQuery('SELECT 1');
            $checks['database'] = 'ok';
        } catch (\Throwable) {
            $checks['database'] = 'error';
            $status = 'degraded';
        }

        try {
            $item = $this->cache->getItem('health_check');
            $checks['redis'] = 'ok';
        } catch (\Throwable) {
            $checks['redis'] = 'error';
            $status = 'degraded';
        }

        return new JsonResponse([
            'status'    => $status,
            'checks'    => $checks,
            'timestamp' => time(),
        ], $status === 'ok' ? 200 : 503);
    }
}
