import configrationData from './json/configration.json'

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

    mock.onPost('/api/v1/masters/configurations').reply((data: any) => {
        const newConfigration = {
            id: Math.floor(Math.random() * 1000),
            name: data.name,
            status: data.status
        }

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

    mock.onPatch('/api/v1/masters/configurations/{id}').reply((data: any) => {
        const requestData = JSON.parse(data.data)
        const configurationsId = requestData.id
        const updatedConfigrationData = configrationData.map((configurations: any) =>
            configurations.id === configurationsId
                ? { ...configurations, name: requestData.name }
                : configurations
        )

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

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

        const configurations = configrationData.find((g: any) => g.id === configurationsId)

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

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

export { mockConfigration }
