<?php

declare(strict_types=1);

namespace App\Filament\System\Widgets;

use App\Models\Workspace;
use App\Models\WorkspaceMembership;
use App\Support\Auth\WorkspaceRole;
use Filament\Widgets\StatsOverviewWidget;
use Filament\Widgets\StatsOverviewWidget\Stat;

class RepairWorkspaceOwnersStats extends StatsOverviewWidget
{
    protected static bool $isLazy = false;

    protected int|string|array $columnSpan = 'full';

    /**
     * @return array<Stat>
     */
    protected function getStats(): array
    {
        $totalWorkspaces = Workspace::query()->count();

        $workspacesWithOwners = WorkspaceMembership::query()
            ->where('role', WorkspaceRole::Owner->value)
            ->distinct('workspace_id')
            ->count('workspace_id');

        $ownerlessWorkspaces = $totalWorkspaces - $workspacesWithOwners;

        $totalMembers = WorkspaceMembership::query()->count();

        return [
            Stat::make('Total workspaces', $totalWorkspaces)
                ->color('gray')
                ->icon('heroicon-o-rectangle-stack'),
            Stat::make('Healthy (has owner)', $workspacesWithOwners)
                ->color($workspacesWithOwners > 0 ? 'success' : 'gray')
                ->icon('heroicon-o-check-circle'),
            Stat::make('Ownerless', $ownerlessWorkspaces)
                ->color($ownerlessWorkspaces > 0 ? 'danger' : 'success')
                ->icon($ownerlessWorkspaces > 0 ? 'heroicon-o-exclamation-triangle' : 'heroicon-o-check-circle'),
            Stat::make('Total memberships', $totalMembers)
                ->color('gray')
                ->icon('heroicon-o-users'),
        ];
    }
}
