import rolesData from './json/role.json'
import featuresData from './json/feature.json'
import permissionsData from './json/permission.json'
import getPermissionData from './json/getPermission.json'

// Mock API for roles
const mockRoles = (mock: any): void => {
    mock.onGet('/api/v1/roles').reply((config: any) => {
        return [200, { data: rolesData }]
    })

    // Mock for getting features list
    mock.onGet('/api/v1/masters/features').reply(200, {
        data: featuresData
    })

    // get role based permissions
    mock.onGet('/api/v1/permissions/$1').reply((config: any) => {
        return [200, { data: getPermissionData }]
    })

    // Mock for adding roles
    mock.onPost('/api/v1/roles/create').reply((config: any) => {
        const data = JSON.parse(config.data)
        const newRole = {
            id: Math.floor(Math.random() * 1000),
            name: data.name,
            label: data.label
        }
        rolesData.push(newRole)
        return [200, { message: 'Added successfully', data: newRole }]
    })

    // Mock for set permissions
    mock.onPost('/api/v1/permissions').reply((config: any) => {
        const data = JSON.parse(config.data)
        const newPermissions = {
            id: Math.floor(Math.random() * 1000),
            role_id: Math.floor(Math.random() * 1000),
            feature_id: Math.floor(Math.random() * 1000),
            name: data.name,
            slug: data.slug
        }
        permissionsData.push(newPermissions)
        return [200, { message: 'Added successfully', data: newPermissions }]
    })

    // Mock for editing roles
    mock.onPatch('/api/v1/roles/{data.id}').reply((config: any) => {
        const data = JSON.parse(config.data)
        const roleId = data.id
        const updatedRolesData = rolesData.map((role: any) =>
            role.id === roleId ? { ...role, name: data.name, label: data.label } : role
        )
        return [200, { message: 'Edited successfully', data: updatedRolesData }]
    })

    // Mock for deleting roles
    mock.onDelete('/api/v1/roles/{data.id}').reply((config: any) => {
        const id = config.id
        const updatedRolesData = rolesData.filter((role: any) => role.id !== id)
        return [200, { message: 'Deleted successfully', data: updatedRolesData }]
    })

    mock.onGet('/api/v1/roles/$2').reply((config: any) => {
        const id = config.url.split('/').pop()
        const role = rolesData.find((r: any) => r.id === id)

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

export { mockRoles }
