<?php

declare(strict_types=1);

namespace App\Mcp\Resource;

use App\Repository\ComposantRepository;
use App\Repository\MachineRepository;
use App\Repository\PieceRepository;
use App\Repository\ProductRepository;
use App\Repository\SiteRepository;
use Doctrine\ORM\EntityManagerInterface;
use Mcp\Capability\Attribute\McpResource;
use Mcp\Schema\Content\TextContent;

#[McpResource(
    uri: 'inventory://stats',
    name: 'Inventory Statistics',
    description: 'Global counters: machines, pieces, composants, products, sites, unresolved comments.',
    mimeType: 'application/json'
)]
class StatsResource
{
    public function __construct(
        private readonly MachineRepository $machines,
        private readonly PieceRepository $pieces,
        private readonly ComposantRepository $composants,
        private readonly ProductRepository $products,
        private readonly SiteRepository $sites,
        private readonly EntityManagerInterface $em,
    ) {}

    public function __invoke(): array
    {
        $unresolvedComments = (int) $this->em->createQuery(
            "SELECT COUNT(c.id) FROM App\\Entity\\Comment c WHERE c.status = 'open'"
        )->getSingleScalarResult();

        return [new TextContent(text: json_encode([
            'machines'           => $this->machines->count([]),
            'pieces'             => $this->pieces->count([]),
            'composants'         => $this->composants->count([]),
            'products'           => $this->products->count([]),
            'sites'              => $this->sites->count([]),
            'unresolvedComments' => $unresolvedComments,
        ], JSON_THROW_ON_ERROR))];
    }
}
