<?php

namespace App\Filament\Widgets;

use App\Enums\OrderStatus;
use App\Models\Order;
use Filament\Widgets\StatsOverviewWidget as BaseWidget;
use Filament\Widgets\StatsOverviewWidget\Stat;

class OrderStats extends BaseWidget
{
    //    protected int|string|array $columnSpan = '2';

    protected function getStats(): array
    {
        return [
            Stat::make('Active Orders', $this->getActiveOrders())
                ->icon('heroicon-o-arrow-path')
                ->description('Orders that have yet to be completed'),
            Stat::make('This Month', $this->getOrdersCurrentMonth())
                ->icon('heroicon-s-calendar')
                ->description('New orders since the beginning of the month'),
            Stat::make('Due Today', $this->getDueOrders())
                ->icon('heroicon-o-clock')
                ->description('Orders that are scheduled to be due today'),
        ];
    }

    private function getActiveOrders(): string
    {
        return Order::all()
            ->where('order_status', '!=', OrderStatus::SHIPPED)
            ->where('order_status', '!=', OrderStatus::INVOICED)
            ->count();
    }

    private function getOrdersCurrentMonth(): string
    {
        return Order::all()
            ->where('order_status', '!=', OrderStatus::SHIPPED)
            ->where('order_status', '!=', OrderStatus::INVOICED)
            ->whereBetween('created_at', [now()->startOfMonth(), now()->endOfMonth()])
            ->count();
    }

    private function getDueOrders(): string
    {
        return Order::all()
            ->where('order_status', '!=', OrderStatus::SHIPPED)
            ->where('order_status', '!=', OrderStatus::INVOICED)
            ->where('due_date', '<=', now())
            ->count();
    }
}