Source: controllers/admin.controller.js

import {
  countPublishedOrders,
  getPaginatedPublishedOrders,
  updateOrderStatus,
} from "../models/order.model.js";
import logger from "../config/logger.js";
import { getUserAnalytics } from "../models/analytics.model.js";

export async function getAllOrders(req, res) {
  try {
    const page = Math.max(parseInt(req.query.page) || 1, 1);
    const limit = Math.max(parseInt(req.query.limit) || 10, 1);

    const totalPublishedOrders = await countPublishedOrders();
    if (page > Math.ceil(totalPublishedOrders / limit)) {
      return res.status(400).json({
        success: false,
        error: "Requested page exceeds available order pages",
      });
    }
    const orders = await getPaginatedPublishedOrders(page, limit, req.query);
    res.json({
      success: true,
      data: orders,
      total: totalPublishedOrders,
      totalPages: Math.ceil(totalPublishedOrders / limit),
      currentPage: page,
    });
  } catch (error) {
    logger.error(
      `[orders.controller] Failed to fetch orders: ${error.message}`
    );
    res.status(500).json({ error: "Failed to load orders" });
  }
}

/**
 * @desc    Update an existing order's status
 * @route   PUT /admin/orders/:id
 * @access  Admin
 */
export async function updateOrderStatusHandler(req, res) {
  try {
    const { id } = req.params;
    const { status } = req.body;
    const order = await updateOrderStatus(id, status);
    if (!order) {
      return res.status(404).json({ error: "Order not found" });
    }
    res.json(order);
  } catch (error) {
    logger.error(
      `[order.controller] Order status update failed: ${error.message}`
    );
    res.status(400).json({ error: "Order status update failed" });
  }
}

export async function getUserAnalyticsHandler(req, res) {
  try {
    const { userId } = req.params;
    const analytics = await getUserAnalytics(userId);
    if (!analytics) {
      return res.status(404).json({ error: "No analytics found for user" });
    }
    res.json({ success: true, data: analytics });
  } catch (error) {
    logger.error(
      `[admin.controller] Failed to fetch user analytics: ${error.message}`
    );
    res.status(500).json({ error: "Failed to load user analytics" });
  }
}