const names = `- (23) 打击乐
    - 112 Tinkle Bell 叮当铃
    - 113 Agogo 阿哥哥铃
    - 114 Steel Drums 钢鼓
    - 115 Woodblock木鱼
    - 116 Taiko Drum 太鼓
    - 117 Melodic Tom 通通鼓
    - 118 Synth Drum 合成鼓
    - 119 Reverse Cymbal 铜钹
    - 35 Acoustic Bass Drum 大鼓 2
    - 36 Bass Drum 1 大鼓 1
    - 37 Side Stick 小鼓鼓边
    - 38 Acoustic Snare 小鼓 1
    - 39 Hand Clap 拍手
    - 40 Electric Snare 小鼓 2
    - 41 Low Floor Tom 低音鼓 2
    - 42 Closed Hi-Hat 闭合钹
    - 43 High Floor Tom 低音鼓 1
    - 44 Pedal Hi-Hat 脚踏钹
    - 45 Low Tom 中音鼓 2
    - 46 Open Hi-Hat 强音钹
    - 47 Low-Mid Tom 中音鼓 1
    - 48 Hi Mid Tom 2 高音鼓 2
    - 49 Crash Cymbal 1 强音钹 1
    - 50 High Tom 高音鼓 1
    - 51 Ride Cymbal 1 打点钹 1
    - 52 Chinese Cymbal 钹
    - 53 Ride Bell 圆铃
    - 54 Tambourine 铃鼓
    - 55 Splash Cymbal 小钹铜钹
    - 56 Cowbell 牛铃
    - 57 Crash Cymbal 2 强音钹 2
    - 58 Vibra-Slap 颤音器
    - 59 Ride Cymbal 2 打点钹 2
    - 60 Hi Bongo 高音邦加鼓
    - 61 Low Bongo 低音邦加鼓
    - 62 Mute Hi Conga 弱音高音康加鼓
    - 63 Open Hi Conga 强音高音康加鼓
    - 64 Low Conga 低音康加鼓
    - 65 High Timbale 高音天巴鼓
    - 66 Low Timbale 低音天巴鼓
    - 67 High Agogo 高音阿哥哥
    - 68 Low Agogo 低音阿哥哥
    - 69 Cabasa 串珠
    - 70 Maracas 沙铃
    - 71 Short Whistle 短口哨
    - 72 Long Whistle 长口哨
    - 73 Short Guiro 短刮壶
    - 74 Long Guiro 长刮壶
    - 75 Claves 梆子
    - 76 Hi Wood Block 高音木块
    - 77 Low Wood Block 低音木块
    - 78 Mute Cuica
    - 79 Open Cuica
    - 80 Mute Triangle 弱音三角铁
    - 81 Open Triangle 强音三角铁
    - Snare Drum 小军鼓
    - Cymbal 镲
    - Cymbals 镲
    - Triangle 三角铁
    - Vibrato 颤音琴
    - Suspend Cymbal 吊镲
    - Tom-Toms 嗵嗵鼓
    - Bell 铃铛
    - Bells 铃铛
    - crash cymbals 对镲
    - Suspend cymbals 吊镲
    - Castanets 响板
- (6) 萨克斯
    - 64 Soprano Sax 高音萨克斯风
    - 65 Alto Sax 中音萨克斯风
    - 66 Tenor Sax 次中音萨克斯风
    - 67 Baritone Sax 低音萨克斯风
    - Soprano Saxophone 高音萨克斯风
    - Alto Saxophone 中音萨克斯风
    - Tenor Saxophone 次中音萨克斯风
    - Baritone Saxophone 低音萨克斯风
- (4) 单簧管(黑管)
    - Clarinet 单簧管(黑管)
    - Alto Clarinet 中音单簧管
- (12) 小号
    - 56 Trumpet 小号
    - 59 Muted Trumpet 加弱音器小号
- (13) 圆号
    - Horn in F 圆号
    - French Horn 圆号
- (14) Trombone 长号
- (17) Tuba 大号
- (Oboe) Oboe 双簧管
- (English Horn) English Horn 英国管
- (Bassoon) Bassoon 巴松(大管)
- (4) Clarinet 单簧管(黑管)
- (120) Piccolo 短笛
- (2) Flute 长笛
- (Recorder) Recorder 竖笛
- (15) Euphonium 上低音号
- (134) ocarina 陶笛
- (135) Pan Flute 排箫
- (136) Hulusi flute 葫芦丝
- (137) Melodica 口风琴`.trim()

const fs = require('fs')
const path = require('path')

const parseNames = names.split('\n')

const data = {}

let parentIndex = 0
for (let index = 0; index < parseNames.length; index++) {
  const parse = parseNames[index];
  if (parse) {
    const indexOf = parse.indexOf('    ')
    if (indexOf === -1) {
      data[parse] = []
      parentIndex = index
    } else if (indexOf === 0) {
      data[parseNames[parentIndex]].push(parse)
    }
  }
}

const formatValue = str => {
  const match = str.trim().match(/( [ a-zA-Z-]+ )/ig)
  if (!match) return ''
  return match.map(item => item.trim()).join(' ').trim()
}

const json = {}
let allvalue = []
for (const key in data) {
  if (Object.hasOwnProperty.call(data, key)) {
    // const value = data[key]
    const name = key.match(/([\w]+\s?[\w]*)/ig)[0]
    // console.log(name)
    json[name] = []
    if (data[key].length) {
      for (let index = 0; index < data[key].length; index++) {
        const item = data[key][index]
        json[name].push(formatValue(item))
      }
    } else {
      // console.log(formatValue(key))
      json[name].push(formatValue(key))
      allvalue = allvalue.concat(formatValue(key))
    }
    allvalue = allvalue.concat(json[name])
  }
}
// console.log(allvalue)
const filepath = path.resolve(__dirname, '../src/constant/instrumentsClassfiy.ts')
const instruments = JSON.parse(fs.readFileSync(path.resolve(filepath, '../instruments.ts')).toString().replace('export default ', ''))

const other = []
for (const key in instruments) {
  if (Object.hasOwnProperty.call(instruments, key)) {
    // const value = instruments[key];
    // console.log(key, value, allvalue.includes(key))
    if (!allvalue.includes(key)) {
      // console.log(key, value)
      other.push(key)
    }
  }
}

json['DYOther'] = other

fs.writeFileSync(filepath, `export default ${JSON.stringify(json, null, 2)}`)
// console.log(json)