// Product Domain MSW Handlers
// This file contains Mock Service Worker handlers for product domain API endpoints

import { http, HttpResponse } from 'msw';
import { mockProductData } from '../../../domains/product/mocks/mockData';

const API_BASE = '/api/product';

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

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

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

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

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

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