// User Domain MSW Handlers
// This file contains Mock Service Worker handlers for user domain API endpoints

import { http, HttpResponse } from 'msw';
import { mockUserData } from '../../../domains/user/mocks/mockData';

const API_BASE = '/api/user';

export const userHandlers = [
  // GET /user - List all user items
  http.get(`${API_BASE}`, () => {
    return HttpResponse.json(mockUserData.getAll());
  }),

  // GET /user/:id - Get single user item
  http.get(`${API_BASE}/:id`, ({ params }) => {
    const { id } = params;
    const item = mockUserData.getById(id as string);
    
    if (!item) {
      return new HttpResponse(null, { 
        status: 404,
        statusText: 'User not found'
      });
    }
    
    return HttpResponse.json(item);
  }),

  // POST /user - Create new user item
  http.post(`${API_BASE}`, async ({ request }) => {
    try {
      const newItem = await request.json();
      const createdItem = mockUserData.create(newItem);
      
      return HttpResponse.json(createdItem, { status: 201 });
    } catch (error) {
      return new HttpResponse(null, { 
        status: 400,
        statusText: 'Invalid user data'
      });
    }
  }),

  // PUT /user/:id - Update user item
  http.put(`${API_BASE}/:id`, async ({ params, request }) => {
    const { id } = params;
    
    try {
      const updates = await request.json();
      const updatedItem = mockUserData.update(id as string, updates);
      
      if (!updatedItem) {
        return new HttpResponse(null, { 
          status: 404,
          statusText: 'User not found'
        });
      }
      
      return HttpResponse.json(updatedItem);
    } catch (error) {
      return new HttpResponse(null, { 
        status: 400,
        statusText: 'Invalid user data'
      });
    }
  }),

  // DELETE /user/:id - Delete user item
  http.delete(`${API_BASE}/:id`, ({ params }) => {
    const { id } = params;
    const deleted = mockUserData.delete(id as string);
    
    if (!deleted) {
      return new HttpResponse(null, { 
        status: 404,
        statusText: 'User not found'
      });
    }
    
    return new HttpResponse(null, { status: 204 });
  }),

  // Add more user-specific endpoints here
  // Example: GET /user/:id/relationships
  // http.get(`${API_BASE}/:id/relationships`, ({ params }) => {
  //   const { id } = params;
  //   const relationships = mockUserData.getRelationships(id as string);
  //   return HttpResponse.json(relationships);
  // }),
];
