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

const clsList = Mock.mock({
  'list|26': [{
    'id': '@increment',
    'nj|1': ['6', '7', '8'],
    'njmc|1': ['2017', '2018', '2019'],
    'yx|1-26': 26,
    'yxmc': '@cword(6, 15)',
    'zy|27-375': 375,
    'zymc': '@cword(3, 5)',
    'bjdm': '@word(5)',
    'bjmc': '@cword(6, 10)',
    'sfky|1': ['1', '0'],
    'sfkymc|1': ['可用', '不可用']
  }]
}).list

export default{
  getList: config => {
    const { yx, zy, bjmc, nj, bjdm, sfky, pageIndex = 1, pageSize = 20 } = param2Obj(config.url)
    const mockList = clsList.filter(item => {
      if (yx && item.yx + '' !== yx + '') return false
      if (zy && item.zy !== zy) return false
      if (bjmc && item.bjmc !== bjmc) return false
      if (nj && item.nj !== nj) return false
      if (bjdm && item.bjdm !== bjdm) return false
      if (sfky && item.sfky !== sfky) 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
    }
  },
  getAllList: config => {
    return {
      items: clsList,
      code: 200
    }
  },
  getItem: config => {
    const { id } = param2Obj(config.url)
    const mockList = clsList.filter(item => item.id + '' === id + '')
    return {
      data: mockList.length > 0 ? mockList[0] : null,
      code: 200
    }
  },
  createData: config => {
    const cls = JSON.parse(config.body)
    if (!cls.id) {
      cls.id = '' + parseInt(Math.random() * 100) + 1024 // mock a id
      clsList.unshift(cls)
    } else {
      for (let i = 0; i < clsList.length; i++) {
        if (clsList[i].id + '' === cls.id + '') {
          clsList.splice(i, 1, cls)
          break
        }
      }
    }
    return {
      item: cls,
      code: 200
    }
  },
  deleteData: config => {
    const cls = JSON.parse(config.body)
    let index = -1
    for (let i = 0; i < clsList.length; i++) {
      if (clsList[i].id + '' === cls.id + '') {
        index = i
        break
      }
    }
    if (index > -1) {
      clsList.splice(index, 1)
    }
    return {
      code: 200
    }
  }
}
