
// // src/controllers/wishlist.controller.ts
// import { Request, Response } from 'express';
// import { getRepository } from 'typeorm';
// import { Wishlist } from '../entities/wishlist.entity';
// import { ProductVariant } from '../entities/product-variant.entity';
// import { WishlistRequest, WishlistResponse } from '../dto/wishlist.dto';
// import { authMiddleware } from '../middleware/auth.middleware';

// export class WishlistController {
//   private wishlistRepository = getRepository(Wishlist);
//   private variantRepository = getRepository(ProductVariant);

//   async getWishlist(req: Request, res: Response) {
//     try {
//       const userId = (req as any).user.userId;
//       const wishlistItems = await this.wishlistRepository.find({
//         where: { user_id: userId },
//         relations: ['variant', 'variant.product', 'variant.images']
//       });

//       const response: WishlistResponse[] = wishlistItems.map(item => ({
//         wishlist_id: item.wishlist_id,
//         variant_id: item.variant_id,
//         product_name: item.variant.product.name,
//         price: item.variant.price,
//         image: item.variant.images?.[0]?.url,
//         created_at: item.created_at
//       }));

//       res.json(response);
//     } catch (error) {
//       res.status(500).json({ message: 'Error fetching wishlist', error: error.message });
//     }
//   }

//   async addToWishlist(req: Request, res: Response) {
//     try {
//       const userId = (req as any).user.userId;
//       const wishlistData: WishlistRequest = req.body;

//       // Check if already in wishlist
//       const existingItem = await this.wishlistRepository.findOne({
//         where: { user_id: userId, variant_id: wishlistData.variant_id }
//       });

//       if (existingItem) {
//         return res.status(400).json({ message: 'Item already in wishlist' });
//       }

//       const wishlistItem = this.wishlistRepository.create({
//         user_id: userId,
//         variant_id: wishlistData.variant_id
//       });

//       await this.wishlistRepository.save(wishlistItem);
//       res.json(await this.getWishlist(req, res));
//     } catch (error) {
//       res.status(500).json({ message: 'Error adding to wishlist', error: error.message });
//     }
//   }

//   async removeFromWishlist(req: Request, res: Response) {
//     try {
//       const wishlistId = parseInt(req.params.id);
//       const userId = (req as any).user.userId;

//       const wishlistItem = await this.wishlistRepository.findOne({
//         where: { wishlist_id: wishlistId, user_id: userId }
//       });

//       if (!wishlistItem) {
//         return res.status(404).json({ message: 'Wishlist item not found' });
//       }

//       await this.wishlistRepository.delete(wishlistId);
//       res.json(await this.getWishlist(req, res));
//     } catch (error) {
//       res.status(500).json({ message: 'Error removing from wishlist', error: error.message });
//     }
//   }
// }