<?php

namespace App\Filament\Pages;

// Widgets generales
use App\Filament\Widgets\Admin\BusinessKPIsWidget;
use App\Filament\Widgets\Admin\CashFlowComparisonChart;
// Widgets Super Admin (métricas SaaS)
use App\Filament\Widgets\Admin\CollectorPerformanceTable;
use App\Filament\Widgets\Admin\OverduePortfolioTable;
use App\Filament\Widgets\Admin\PortfolioAgingChart;
use App\Filament\Widgets\Collector\CollectorDueInstallmentsTable;
use App\Filament\Widgets\Collector\CollectorStatsWidget;
// Widgets Admin — BI Dashboard (solo estos 5, todos los demás eliminados)
use App\Filament\Widgets\MoraCreditsTable;
use App\Filament\Widgets\PendingSubscriptionRequestsWidget;
use App\Filament\Widgets\SuperAdmin\CompaniesNearLimitTable;
use App\Filament\Widgets\SuperAdmin\MRRGrowthChart;
use App\Filament\Widgets\SuperAdmin\PlatformStatsWidget;
// Widgets Supervisor (gestión de equipo)
use App\Filament\Widgets\SuperAdmin\SubscriptionsByPlanTable;
use App\Filament\Widgets\SuperAdmin\SubscriptionsByStatusChart;
use App\Filament\Widgets\Supervisor\CollectorPerformanceTodayTable;
use App\Filament\Widgets\Supervisor\InstallmentsDueTodayTable;
use App\Filament\Widgets\Supervisor\OverdueInstallmentsTable;
use App\Filament\Widgets\Supervisor\PerformanceAlertsWidget;
// Widgets Collector (progreso diario)
use App\Filament\Widgets\Supervisor\TeamCollectionTrendChart;
use App\Filament\Widgets\Supervisor\TeamStatsWidget;
use Filament\Pages\Dashboard as BasePage;
use Illuminate\Support\Facades\Auth;

class Dashboard extends BasePage
{
    protected static ?string $title = 'Escritorio';

    /**
     * Número de columnas del grid principal.
     *
     * Admin: 2 columnas para layout lado a lado (gráficos).
     * Resto: 1 columna (layout vertical estándar).
     */
    public function getColumns(): int|array
    {
        $user = Auth::user();

        if ($user && $user->hasRole('admin') && ! $user->isSuperAdmin()) {
            return [
                'sm' => 1,  // Móvil: columna única
                'lg' => 2,  // Tablet/Desktop: 2 columnas lado a lado
            ];
        }

        return 1;
    }

    /**
     * Columnas del grid del área de header widgets.
     * Admin: 1 columna para que BusinessKPIsWidget siempre ocupe el ancho completo.
     */
    public function getHeaderWidgetsColumns(): int|array
    {
        $user = Auth::user();

        if ($user && $user->hasRole('admin') && ! $user->isSuperAdmin()) {
            return 1;
        }

        return 2;
    }

    /**
     * Widgets del área de header (banda superior fija, encima del grid principal).
     */
    protected function getHeaderWidgets(): array
    {
        $user = Auth::user();

        if ($user->isSuperAdmin()) {
            return [PlatformStatsWidget::class];
        }

        if ($user->hasRole('admin')) {
            // Solo las 3 tarjetas KPI: Caja Actual, Saldo por Cobrar, Valor del Negocio.
            return [BusinessKPIsWidget::class];
        }

        if ($user->hasRole('supervisor')) {
            return [TeamStatsWidget::class];
        }

        if ($user->hasRole('collector')) {
            return [CollectorStatsWidget::class];
        }

        return [];
    }

    /**
     * Widgets del grid principal del dashboard.
     *
     * Admin — layout BI (2 cols en desktop):
     *   [PortfolioAgingChart col=1] | [CashFlowComparisonChart col=1]
     *   [CollectorPerformanceTable    col=full                       ]
     *   [OverduePortfolioTable         col=full                       ]
     */
    public function getWidgets(): array
    {
        $user = Auth::user();

        // ═══════════════════════════════════════════════════════════════════
        // SUPER ADMIN: Métricas SaaS de plataforma
        // ═══════════════════════════════════════════════════════════════════
        if ($user->isSuperAdmin()) {
            return [
                PlatformStatsWidget::class,
                PendingSubscriptionRequestsWidget::class,
                SubscriptionsByStatusChart::class,
                MRRGrowthChart::class,
                SubscriptionsByPlanTable::class,
                CompaniesNearLimitTable::class,
            ];
        }

        // ═══════════════════════════════════════════════════════════════════
        // ADMIN: Dashboard BI — únicamente gráficos y tablas operacionales.
        // Los KPIs (BusinessKPIsWidget) van en getHeaderWidgets() arriba.
        // ═══════════════════════════════════════════════════════════════════
        if ($user->hasRole('admin')) {
            return [
                PortfolioAgingChart::class,       // columnSpan = 1  (col izquierda)
                CashFlowComparisonChart::class,   // columnSpan = 1  (col derecha)
                CollectorPerformanceTable::class, // columnSpan = full
                OverduePortfolioTable::class,     // columnSpan = full
            ];
        }

        // ═══════════════════════════════════════════════════════════════════
        // SUPERVISOR: Gestión de equipo
        // ═══════════════════════════════════════════════════════════════════
        if ($user->hasRole('supervisor')) {
            return [
                TeamStatsWidget::class,
                PerformanceAlertsWidget::class,
                CollectorPerformanceTodayTable::class,
                TeamCollectionTrendChart::class,
                InstallmentsDueTodayTable::class,
                OverdueInstallmentsTable::class,
            ];
        }

        // ═══════════════════════════════════════════════════════════════════
        // COLLECTOR: Progreso diario
        // ═══════════════════════════════════════════════════════════════════
        return [
            CollectorStatsWidget::class,
            CollectorDueInstallmentsTable::class,
            MoraCreditsTable::class,
        ];
    }
}
