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

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

export default{
  getList: config => {
    const { gh, xm, yx, zzmm, sex, 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 (sex && item.sex !== sex) 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
    }
  }
}
