namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use App\Models\User; use App\Models\Order; use App\Models\Transaction; use App\Models\Service; use App\Models\Ticket; use App\Models\Deposit; use App\Models\Withdrawal; use Carbon\Carbon; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; class DashboardController extends Controller { public function index() { $admin = auth()->guard('admin')->user(); // Today's stats $today = Carbon::today(); $stats = [ 'total_users' => User::count(), 'new_users_today' => User::whereDate('created_at', $today)->count(), 'active_users' => User::where('status', 'active')->count(), 'total_orders' => Order::count(), 'orders_today' => Order::whereDate('created_at', $today)->count(), 'pending_orders' => Order::whereIn('status', ['pending', 'processing'])->count(), 'completed_orders' => Order::where('status', 'completed')->count(), 'total_revenue' => Order::where('status', 'completed')->sum('price'), 'revenue_today' => Order::whereDate('created_at', $today)->where('status', 'completed')->sum('price'), 'total_profit' => Order::where('status', 'completed')->sum('profit'), 'pending_deposits' => Deposit::where('status', 'pending')->count(), 'pending_withdrawals' => Withdrawal::where('status', 'pending')->count(), 'open_tickets' => Ticket::where('status', 'open')->count(), 'total_services' => Service::count(), 'active_services' => Service::where('status', 'active')->count(), ]; // Chart data for last 7 days $chartData = $this->getChartData(); // Recent activities $recentActivities = DB::table('activity_logs') ->where('log_name', 'admin') ->latest() ->limit(10) ->get(); // Top services $topServices = Order::select('service_id', DB::raw('count(*) as total_orders'), DB::raw('sum(price) as total_revenue')) ->where('status', 'completed') ->with('service') ->groupBy('service_id') ->orderByDesc('total_revenue') ->limit(5) ->get(); // Recent users $recentUsers = User::latest()->limit(5)->get(); // Recent orders $recentOrders = Order::with(['user', 'service']) ->latest() ->limit(5) ->get(); return view('admin.dashboard.index', compact( 'stats', 'chartData', 'recentActivities', 'topServices', 'recentUsers', 'recentOrders' )); } protected function getChartData() { $dates = []; $orders = []; $revenue = []; $users = []; for ($i = 6; $i >= 0; $i--) { $date = Carbon::today()->subDays($i); $dates[] = $date->format('M d'); // Orders count $orders[] = Order::whereDate('created_at', $date)->count(); // Revenue $revenue[] = Order::whereDate('created_at', $date) ->where('status', 'completed') ->sum('price'); // New users $users[] = User::whereDate('created_at', $date)->count(); } return [ 'labels' => $dates, 'orders' => $orders, 'revenue' => $revenue, 'users' => $users, ]; } public function getAnalytics(Request $request) { $period = $request->get('period', 'month'); switch ($period) { case 'week': $startDate = Carbon::now()->startOfWeek(); $endDate = Carbon::now()->endOfWeek(); break; case 'month': $startDate = Carbon::now()->startOfMonth(); $endDate = Carbon::now()->endOfMonth(); break; case 'year': $startDate = Carbon::now()->startOfYear(); $endDate = Carbon::now()->endOfYear(); break; default: $startDate = Carbon::now()->startOfMonth(); $endDate = Carbon::now()->endOfMonth(); } $analytics = [ 'orders' => Order::whereBetween('created_at', [$startDate, $endDate]) ->select(DB::raw('DATE(created_at) as date'), DB::raw('count(*) as total')) ->groupBy('date') ->get(), 'revenue' => Order::where('status', 'completed') ->whereBetween('created_at', [$startDate, $endDate]) ->select(DB::raw('DATE(created_at) as date'), DB::raw('sum(price) as total')) ->groupBy('date') ->get(), 'users' => User::whereBetween('created_at', [$startDate, $endDate]) ->select(DB::raw('DATE(created_at) as date'), DB::raw('count(*) as total')) ->groupBy('date') ->get(), ]; return response()->json($analytics); } }