<?php

namespace App\Filament\Central\Widgets;

use App\Models\Central\Company;
use App\Models\Central\Subscription;
use Filament\Widgets\StatsOverviewWidget as BaseWidget;
use Filament\Widgets\StatsOverviewWidget\Stat;

class PlatformStats extends BaseWidget
{
    protected static ?int $sort = 1;

    protected function getStats(): array
    {
        $total = Company::count();
        $active = Company::where('status', 'active')->count();
        $trial = Company::where('status', 'trial')->count();
        $expiring = Company::where('status', 'active')
            ->whereNotNull('active_until')
            ->whereDate('active_until', '<=', now()->addDays(7))
            ->count();

        $mrr = (float) Subscription::where('status', 'paid')
            ->whereYear('paid_at', date('Y'))
            ->whereMonth('paid_at', date('m'))
            ->sum('amount');

        $overdue = Subscription::where('status', 'overdue')->count()
            + Subscription::where('status', 'pending')
                ->whereNotNull('due_at')
                ->where('due_at', '<', now())
                ->count();

        return [
            Stat::make('Tenants total', $total)
                ->description('Toate companiile')
                ->descriptionIcon('heroicon-m-building-office-2')
                ->color('primary')
                ->url(\App\Filament\Central\Resources\CompanyResource::getUrl('index')),
            Stat::make('Active', $active)
                ->description("✓ Pe abonament plătit")
                ->descriptionIcon('heroicon-m-check-circle')
                ->color('success'),
            Stat::make('În trial', $trial)
                ->description($trial > 0 ? 'Posibili clienți noi' : '—')
                ->descriptionIcon('heroicon-m-clock')
                ->color('warning'),
            Stat::make('Expiră < 7 zile', $expiring)
                ->description($expiring > 0 ? '⚠ Acțiune necesară' : 'Toate ok')
                ->descriptionIcon('heroicon-m-exclamation-triangle')
                ->color($expiring > 0 ? 'danger' : 'success'),
            Stat::make('Venit luna curentă', number_format($mrr, 0, ',', ' ') . ' MDL')
                ->description('MRR realizat')
                ->descriptionIcon('heroicon-m-banknotes')
                ->color('success'),
            Stat::make('Facturi neplătite', $overdue)
                ->description($overdue > 0 ? 'Verifică și amintește' : 'Toate plătite')
                ->descriptionIcon('heroicon-m-exclamation-circle')
                ->color($overdue > 0 ? 'danger' : 'gray')
                ->url(\App\Filament\Central\Resources\SubscriptionResource::getUrl('index') . '?activeTab=overdue'),
        ];
    }
}
