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|30-40': 50,
    '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
    }
  },
  getBjListByZy: config => {
    const { zy } = param2Obj(config.url)
    const mockList = clsList.filter(item => item.zy + '' === zy + '')

    return {
      items: mockList,
      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
    }
  }
}
