<?php

namespace App\Http\Controllers;

use App\Services\LegGovDiscoveryService;
use App\Services\LegGovMetricsService;
use App\Services\ServerMetricsService;
use App\Services\BackupMetricsService;

class DashboardController extends Controller
{
    public function index(
        LegGovDiscoveryService $discovery,
        LegGovMetricsService $metrics,
        ServerMetricsService $serverMetrics,
        BackupMetricsService $backupMetrics
    ) {
        $apps = array_map(
            function (array $app) use ($metrics, $backupMetrics) {
                $app = $metrics->enrich($app);
                $app['backup'] = $backupMetrics->forDatabase(
                    $app['database'] ?? null
                );

                return $app;
            },
            $discovery->discover()
        );

        $totals = [
            'instalacoes' => count($apps),
            'online' => count(array_filter(
                $apps,
                fn ($a) => $a['status'] === 'online'
            )),
            'usuarios' => array_sum(array_map(
                fn ($a) => (int) ($a['active_users'] ?? 0),
                $apps
            )),
            'laravel' => count(array_filter(
                $apps,
                fn ($a) => $a['type'] === 'laravel'
            )),
            'php' => count(array_filter(
                $apps,
                fn ($a) => $a['type'] === 'php'
            )),
        ];

        $server = $serverMetrics->get();

        $backup = [
            'files' => $backupMetrics->latestFilesBackup(),
            'run' => $backupMetrics->latestRun(),
        ];

        $totals['backups_ok'] = count(array_filter(
            $apps,
            fn ($a) => ($a['backup']['status'] ?? null) === 'ok'
        ));

        return view(
            'dashboard',
            compact('apps', 'totals', 'server', 'backup')
        );
    }
}
