import citiessData from './json/cities.json'

const mockcities = (mock: any): void => {
    mock.onGet('/api/v1/masters/cities').reply(() => {
        return [200, { data: citiessData }]
    })

    // Mock for adding citiess
    mock.onPost('/api/v1/masters/cities').reply((data: any) => {
        const newcitiess = {
            id: Math.floor(Math.random() * 1000),
            name: data.name,
            status: data.status
        }

        return [200, { message: 'added successfully', data: newcitiess }]
    })

    // Mock for editing citiess
    mock.onPatch('/api/v1/masters/cities/{id}').reply((data: any) => {
        const requestData = JSON.parse(data.data)
        const citiesId = requestData.id
        const updatedcitiessData = citiessData.map((cities: any) =>
            cities.id === citiesId ? { ...cities, name: requestData.name } : cities
        )

        return [200, { message: 'edited successfully', data: updatedcitiessData }]
    })

    mock.onGet('/api/v1/masters/cities/{id}').reply((config: any) => {
        const citiesId = parseInt(config.url?.split('/').pop() ?? '', 10)

        const cities = citiessData.find((g: any) => g.id === citiesId)

        if (cities !== undefined) {
            return [200, { message: 'Fetched successfully', data: cities }]
        } else {
            return [404, { message: 'cities not found', data: null }]
        }
    })

    mock.onDelete('/api/v1/masters/cities/{id}').reply((config: any) => {
        const citiesId = parseInt(config.url?.split('/').pop() ?? '', 10)
        const updatedcitiessData = citiessData.filter((cities: any) => cities.id !== citiesId)
        return [200, { message: 'Deleted successfully', data: updatedcitiessData }]
    })
}

export { mockcities }
