<?php

declare(strict_types=1);

namespace App\Filament\Widgets;

use App\Models\Category;
use App\Models\Offer;
use App\Models\Order;
use App\Models\Post;
use App\Models\Producer;
use App\Models\Product;
use App\Models\Project;
use App\Models\Report;
use App\Models\Service;
use App\Models\Tag;
use App\Models\User;
use Filament\Widgets\StatsOverviewWidget as BaseWidget;
use Filament\Widgets\StatsOverviewWidget\Stat;
use Mortezaa97\Reviews\Models\Review;
use Mortezaa97\Support\Models\Ticket;

class DashboardStatsOverview extends BaseWidget
{
    protected static ?int $sort = 0;

    protected function getStats(): array
    {
        $ordersTotal = Order::sum('total_price');
        $pendingOrders = Order::where('status', 'pending')->count();

        $stats = [
            Stat::make('کاربران', User::count())
                ->description('کل کاربران ثبت‌شده')
                ->descriptionIcon('heroicon-m-users')
                ->color('primary'),

            Stat::make('سفارشات', Order::count())
                ->description($pendingOrders > 0 ? "{$pendingOrders} سفارش در انتظار تایید" : 'همه تسویه شده')
                ->descriptionIcon('heroicon-m-shopping-cart')
                ->color('warning'),

            Stat::make('محصولات', Product::count())
                ->description('کل محصولات')
                ->descriptionIcon('heroicon-m-cube')
                ->color('info'),

            Stat::make('پروژه‌ها', Project::count())
                ->description('کل پروژه‌ها')
                ->descriptionIcon('heroicon-m-folder')
                ->color('info'),

            Stat::make('پیشنهادات', Offer::count())
                ->description('کل پیشنهادات')
                ->descriptionIcon('heroicon-m-hand-raised')
                ->color('gray'),

            Stat::make('گزارش‌ها', Report::count())
                ->description('کل گزارش‌ها')
                ->descriptionIcon('heroicon-m-document-chart-bar')
                ->color('gray'),

            Stat::make('خدمات', Service::count())
                ->description('کل خدمات')
                ->descriptionIcon('heroicon-m-wrench-screwdriver')
                ->color('gray'),

            Stat::make('تولیدکنندگان', Producer::count())
                ->description('تولیدکنندگان ثبت‌شده')
                ->descriptionIcon('heroicon-m-building-storefront')
                ->color('gray'),

            Stat::make('دسته‌بندی‌ها', Category::count())
                ->description('کل دسته‌بندی‌ها')
                ->descriptionIcon('heroicon-m-squares-2x2')
                ->color('gray'),

            Stat::make('مقالات', Post::count())
                ->description('کل مقالات')
                ->descriptionIcon('heroicon-m-document-text')
                ->color('gray'),

            Stat::make('برچسب‌ها', Tag::count())
                ->description('کل برچسب‌ها')
                ->descriptionIcon('heroicon-m-tag')
                ->color('gray'),
        ];

        if (class_exists(Review::class)) {
            $stats[] = Stat::make('نظرات', Review::count())
                ->description('کل نظرات')
                ->descriptionIcon('heroicon-m-chat-bubble-left-right')
                ->color('gray');
        }

        if (class_exists(Ticket::class)) {
            $stats[] = Stat::make('تیکت‌های پشتیبانی', Ticket::count())
                ->description('کل تیکت‌ها')
                ->descriptionIcon('heroicon-m-ticket')
                ->color('gray');
        }

        return $stats;
    }

    protected function getColumns(): int
    {
        return 4;
    }
}
