/**
 * API: Single Notification Endpoint
 * GET /api/notifications/:id - Get notification details
 * PATCH /api/notifications/:id - Update notification (mark as read)
 * DELETE /api/notifications/:id - Delete notification
 */

import type { NextApiRequest, NextApiResponse } from 'next';
import { getNotificationService } from '../../../lib/notifications';

export default async function handler(
  req: NextApiRequest,
  res: NextApiResponse
) {
  const { id } = req.query;
  const notificationId = id as string;

  if (!notificationId) {
    return res.status(400).json({ error: 'Notification ID required' });
  }

  const notificationService = getNotificationService();
  // In production, get userId from session/auth
  const userId = req.query.userId as string || req.body?.userId || 'demo-user';

  if (req.method === 'GET') {
    try {
      const notification = notificationService.getNotification(notificationId);

      if (!notification) {
        return res.status(404).json({
          success: false,
          error: 'Notification not found'
        });
      }

      // Check ownership
      if (notification.recipientId !== userId) {
        return res.status(403).json({
          success: false,
          error: 'Access denied'
        });
      }

      return res.status(200).json({
        success: true,
        data: notification
      });
    } catch (error: any) {
      return res.status(500).json({
        success: false,
        error: error.message
      });
    }
  }

  if (req.method === 'PATCH') {
    try {
      const { read } = req.body;

      if (read === true) {
        const success = notificationService.markAsRead(notificationId, userId);

        if (!success) {
          return res.status(404).json({
            success: false,
            error: 'Notification not found or access denied'
          });
        }
      }

      const notification = notificationService.getNotification(notificationId);

      return res.status(200).json({
        success: true,
        data: notification
      });
    } catch (error: any) {
      return res.status(500).json({
        success: false,
        error: error.message
      });
    }
  }

  if (req.method === 'DELETE') {
    try {
      const success = notificationService.delete(notificationId, userId);

      if (!success) {
        return res.status(404).json({
          success: false,
          error: 'Notification not found or access denied'
        });
      }

      return res.status(200).json({
        success: true,
        message: 'Notification deleted'
      });
    } catch (error: any) {
      return res.status(500).json({
        success: false,
        error: error.message
      });
    }
  }

  return res.status(405).json({ error: 'Method not allowed' });
}
