import launchData from './json/launch.json'
import getLaunch from './json/getLaunch.json'
import getLaunch2 from './json/getLaunched.json'
import projectData from './json/project.json'
const mockLaunch = (mock: any): void => {
    mock.onGet('/api/v1/launch').reply(() => {
        return [200, { data: launchData }]
    })

    mock.onGet(/\/api\/v1\/launch\/\d+?/).reply((config: any) => {
        const id = parseInt(config.url.split('/').pop(), 10)
        const jsonDataMap: any = {
            1: getLaunch,
            2: getLaunch2
        }
        if (Object.prototype.hasOwnProperty.call(jsonDataMap, id)) {
            return [200, { data: jsonDataMap[id] }]
        } else {
            return [404, { error: 'Data not found' }]
        }
    })

    mock.onGet(/\/api\/v1\/projects\/\d+?/).reply(() => {
        return [200, { data: projectData }]
    })

    mock.onPatch('/api/v1/launch/change-status/by-launch/2').reply((config: any) => {
        const toggleSwitch = JSON.parse(config.data)
        return [200, { message: 'Update successfully', data: toggleSwitch }]
    })

    mock.onPost('/api/v1/launch').reply((config: any) => {
        const launchData = JSON.parse(config.data)
        return [200, { message: 'Added successfully', data: launchData }]
    })

    mock.onPatch('/api/v1/launch/1').reply((config: any) => {
        const launchesData = JSON.parse(config.data)
        return [200, { message: 'Launch updated successfully.', data: launchesData }]
    })

    mock.onDelete('/api/v1/launch/:launchId').reply((config: any) => {
        const launchId = parseInt(config.url.split('/').pop(), 10)
        const index = launchData.findIndex((launch) => launch.id === launchId)
        if (index !== -1) {
            launchData.splice(index, 1)
            return [200]
        } else {
            return [404, { message: 'Launch not found' }]
        }
    })

    mock.onPost('/api/v1/launch/change-status/by-launch').reply((config: any) => {
        const toggleSwitch = JSON.parse(config.data)
        return [200, { message: 'Added successfully', data: toggleSwitch }]
    })

    mock.onPost('/api/v1/launch/create-sales/by-launch').reply((config: any) => {
        const launchSalesData = JSON.parse(config.data)
        return [200, { message: 'Added successfully', data: launchSalesData }]
    })

    mock.onPatch('/api/v1/launch/create-sales/by-launch/2').reply((config: any) => {
        const launchSalesData = JSON.parse(config.data)
        return [200, { message: 'Launch updated successfully.', data: launchSalesData }]
    })
}

export { mockLaunch }
