import { http, HttpResponse } from 'msw';

export const notificationHandlers = [
  http.get('/api/notifications/in-app', ({ request }) => {
    const url = new URL(request.url);
    const offset = parseInt(url.searchParams.get('offset') || '0', 10);
    const limit = parseInt(url.searchParams.get('limit') || '20', 10);

    const allNotifications = Array.from({ length: 25 }, (_, i) => ({
      id: i + 1,
      type: 'simple',
      scope: 'trip',
      target: 1,
      sender_id: 2,
      sender_username: 'alice',
      sender_avatar: null,
      recipient_id: 1,
      title_key: 'notif.title',
      title_params: '{}',
      text_key: 'notif.text',
      text_params: '{}',
      positive_text_key: null,
      negative_text_key: null,
      response: null,
      navigate_text_key: null,
      navigate_target: null,
      is_read: i < 5 ? 0 : 1,
      created_at: '2025-01-01T00:00:00.000Z',
    }));

    const page = allNotifications.slice(offset, offset + limit);

    return HttpResponse.json({
      notifications: page,
      total: allNotifications.length,
      unread_count: 5,
    });
  }),

  http.get('/api/notifications/in-app/unread-count', () => {
    return HttpResponse.json({ count: 5 });
  }),

  http.put('/api/notifications/in-app/:id/read', () => {
    return HttpResponse.json({ success: true });
  }),

  http.put('/api/notifications/in-app/:id/unread', () => {
    return HttpResponse.json({ success: true });
  }),

  http.put('/api/notifications/in-app/read-all', () => {
    return HttpResponse.json({ success: true });
  }),

  http.delete('/api/notifications/in-app/:id', () => {
    return HttpResponse.json({ success: true });
  }),

  http.delete('/api/notifications/in-app/all', () => {
    return HttpResponse.json({ success: true });
  }),

  http.post('/api/notifications/test-ntfy', async () => {
    return HttpResponse.json({ success: true });
  }),

  http.post('/api/notifications/in-app/:id/respond', async ({ request, params }) => {
    const body = await request.json() as { response: string };
    return HttpResponse.json({
      notification: {
        id: Number(params.id),
        type: 'boolean',
        scope: 'trip',
        target: 1,
        sender_id: 2,
        sender_username: 'alice',
        sender_avatar: null,
        recipient_id: 1,
        title_key: 'notif.title',
        title_params: '{}',
        text_key: 'notif.text',
        text_params: '{}',
        positive_text_key: 'accept',
        negative_text_key: 'decline',
        response: body.response,
        navigate_text_key: null,
        navigate_target: null,
        is_read: 1,
        created_at: '2025-01-01T00:00:00.000Z',
      },
    });
  }),
];
