import { HttpResponse, http } from 'msw' import { mockAnalytics, mockAuthResponse, mockBond, mockBondHistory, mockBrokerAccounts, mockBrokerEvents, mockBrokerOperations, mockBrokerPortfolio, mockBrokerPositions, mockCandles, mockDividends, mockEventsSummary, mockPortfolioDetail, mockPortfolios, mockPositions, mockScreenerItems, mockSearchResults, mockShare, mockShareHistory, mockUser, } from './data' import { envelope } from './utils' const API = '/api/v1' export const handlers = [ http.get(`${API}/health`, () => HttpResponse.json( envelope({ status: 'ok', timestamp: new Date().toISOString(), uptime: 12345 }), ), ), http.get(`${API}/auth/me`, () => HttpResponse.json(envelope(mockUser))), http.patch(`${API}/auth/me`, () => HttpResponse.json(envelope({ ...mockUser, name: 'Updated' }))), http.post(`${API}/auth/login`, () => HttpResponse.json(envelope(mockAuthResponse))), http.post(`${API}/auth/register`, () => HttpResponse.json(envelope(mockAuthResponse))), http.post(`${API}/auth/refresh`, () => HttpResponse.json(envelope(mockAuthResponse))), http.post(`${API}/auth/logout`, () => HttpResponse.json(envelope({ message: 'Logged out' }))), http.get(`${API}/securities/search`, ({ request }) => { const url = new URL(request.url) const q = url.searchParams.get('q') || '' if (q.length < 2) return HttpResponse.json(envelope([])) const filtered = mockSearchResults.filter( (r) => r.secid.toLowerCase().includes(q.toLowerCase()) || r.shortName.toLowerCase().includes(q.toLowerCase()), ) return HttpResponse.json(envelope(filtered)) }), http.get(`${API}/securities/shares/:secid`, ({ params }) => { const { secid } = params if (secid === 'NOTFOUND') return new HttpResponse(null, { status: 404 }) return HttpResponse.json(envelope({ ...mockShare, secid })) }), http.get(`${API}/securities/shares/:secid/marketdata`, () => HttpResponse.json(envelope(mockShare.marketData)), ), http.get(`${API}/securities/shares/:secid/dividends`, () => HttpResponse.json(envelope(mockDividends)), ), http.get(`${API}/securities/shares/:secid/history`, () => HttpResponse.json(envelope(mockShareHistory)), ), http.get(`${API}/securities/shares/:secid/candles`, () => HttpResponse.json(envelope(mockCandles)), ), http.get(`${API}/securities/bonds/:secid`, ({ params }) => { const { secid } = params if (secid === 'NOTFOUND') return new HttpResponse(null, { status: 404 }) return HttpResponse.json(envelope({ ...mockBond, secid })) }), http.get(`${API}/securities/bonds/:secid/marketdata`, () => HttpResponse.json(envelope(mockBond.marketData)), ), http.get(`${API}/securities/bonds/:secid/history`, () => HttpResponse.json(envelope(mockBondHistory)), ), http.get(`${API}/securities/bonds/:secid/candles`, () => HttpResponse.json(envelope(mockCandles)), ), http.get(`${API}/securities/screener`, () => HttpResponse.json( envelope({ items: mockScreenerItems, total: mockScreenerItems.length, page: 1, pageSize: 20, totalPages: 1, }), ), ), http.get(`${API}/portfolios`, () => HttpResponse.json(envelope(mockPortfolios))), http.post(`${API}/portfolios`, () => HttpResponse.json(envelope(mockPortfolios[0]))), http.get(`${API}/portfolios/:id`, () => HttpResponse.json(envelope(mockPortfolioDetail))), http.patch(`${API}/portfolios/:id`, () => HttpResponse.json(envelope(mockPortfolios[0]))), http.delete(`${API}/portfolios/:id`, () => HttpResponse.json(envelope(null))), http.post(`${API}/portfolios/:id/positions`, () => HttpResponse.json(envelope(mockPositions[0]))), http.patch(`${API}/portfolios/:id/positions/:positionId`, () => HttpResponse.json(envelope(mockPositions[0])), ), http.delete(`${API}/portfolios/:id/positions/:positionId`, () => HttpResponse.json(envelope(null)), ), http.get(`${API}/portfolios/:id/analytics`, () => HttpResponse.json(envelope(mockAnalytics))), http.get(`${API}/broker/accounts`, () => HttpResponse.json(envelope(mockBrokerAccounts))), http.get(`${API}/broker/accounts/:accountId/portfolio`, () => HttpResponse.json(envelope(mockBrokerPortfolio)), ), http.get(`${API}/broker/accounts/:accountId/positions`, () => HttpResponse.json( envelope({ accountId: '2084014113', items: mockBrokerPositions, nextCursor: null, hasNext: false, asOf: '2024-06-01T10:00:00Z', }), ), ), http.get(`${API}/broker/accounts/:accountId/operations`, () => HttpResponse.json( envelope({ accountId: '2084014113', items: mockBrokerOperations, nextCursor: null, hasNext: false, asOf: '2024-06-01T10:00:00Z', }), ), ), http.get(`${API}/broker/accounts/:accountId/events`, () => HttpResponse.json( envelope({ items: mockBrokerEvents, summary: mockEventsSummary, asOf: '2024-06-01T10:00:00Z', }), ), ), http.post(`${API}/broker/accounts/:accountId/operations/sync`, () => HttpResponse.json(envelope({ upserted: 5 })), ), ]