import { Request, Response } from 'express';
import RewardRedemption from '../models/rewardRedemption';
import { sendResponse, handleError } from '../utils/apiResponse';

// @desc    Get user's reward redemption history
// @route   GET /api/rewards/history
export const getRedemptionHistory = async (req: Request, res: Response): Promise<void> => {
  try {
    const userId = req.user!.id;
    const page = parseInt(req.query.page as string) || 1;
    const limit = parseInt(req.query.limit as string) || 10;
    const skip = (page - 1) * limit;
    const total = await RewardRedemption.countDocuments({ user: userId });
    let redemptions = await RewardRedemption.find({ user: userId })
      .populate('reward', 'name type points_required image_url')
      .sort({ requestedAt: -1 })
      .skip(skip)
      .limit(limit)
      .lean();

    // Map status values for frontend display
    const statusMap: Record<string, string> = {
      pending: 'Pending',
      fulfilled: 'Redeemed',
      rejected: 'Rejected',
    };
    redemptions = redemptions.map((r: any) => ({
      ...r,
      status: statusMap[r.status] || r.status,
    }));
    const pagination = {
      total,
      page,
      limit,
      totalPages: Math.ceil(total / limit),
      hasNextPage: page < Math.ceil(total / limit),
      hasPrevPage: page > 1,
    };
    sendResponse(res, 200, 'Reward redemption history fetched', { redemptions }, pagination);
  } catch (error) {
    handleError(res, error);
  }
};
