import Mock from 'mockjs'
import { param2Obj } from '@/utils'

const departmentleaderList = Mock.mock({
  'list|50': [{
    'gh': '@increment',
    'xm': '@cword(2, 3)',
    'yx': '@cword(6, 15)',
    'xb|1': ['男', '女'],
    'zzmm|1': ['党员', '共青团员', '群众'],
    'lxdh': '@word',
    'sfzr|1': ['是', '否']
  }]
}).list

export default{
  getList: config => {
    const { gh, xm, yx, zzmm, xb, pageIndex = 1, pageSize = 20 } = param2Obj(config.url)
    const mockList = departmentleaderList.filter(item => {
      if (gh && item.gh + '' !== gh + '') return false
      if (xm && item.xm !== xm) return false
      if (yx && item.yx !== yx) return false
      if (zzmm && item.zzmm !== zzmm) return false
      if (xb && item.xb !== xb) return false
      return true
    })

    const pageList = mockList.filter((item, index) => index < pageSize * pageIndex && index >= pageSize * (pageIndex - 1))
    return {
      items: pageList,
      recordCount: mockList.length,
      code: 200
    }
  },
  getItem: config => {
    const { id } = param2Obj(config.url)
    const mockList = departmentleaderList.filter(item => item.id + '' === id + '')
    return {
      data: mockList.length > 0 ? mockList[0] : null,
      code: 200
    }
  },
  createData: config => {
    const departmentleader = JSON.parse(config.body)
    if (!departmentleader.id) {
      departmentleader.id = '' + parseInt(Math.random() * 100) + 1024 // mock a id
      departmentleaderList.unshift(departmentleader)
    } else {
      for (let i = 0; i < departmentleaderList.length; i++) {
        if (departmentleaderList[i].id + '' === departmentleader.id + '') {
          departmentleaderList.splice(i, 1, departmentleader)
          break
        }
      }
    }
    return {
      item: departmentleader,
      code: 200
    }
  },
  deleteData: config => {
    const departmentleader = JSON.parse(config.body)
    let index = -1
    for (let i = 0; i < departmentleaderList.length; i++) {
      if (departmentleaderList[i].id + '' === departmentleader.id + '') {
        index = i
        break
      }
    }
    if (index > -1) {
      departmentleaderList.splice(index, 1)
    }
    return {
      code: 200
    }
  }
}
