#!/bin/bash

# 获取需要初始化的组件名称
lowerCaseName=$1
componentCName=$2
fileVue=../packages/components/$lowerCaseName/src/index.vue
fileIndexJs=../packages/components/$lowerCaseName/index.js
fileReadme=../packages/components/$lowerCaseName/README.md
fileTopJs=../packages/index.js

# 生成文件夹
mkdir -p ../packages/components/$lowerCaseName

# 复制模板文件到新目录
cp -r ./template/* ../packages/components/$lowerCaseName

# 替换文件内容
sed -i "s/\[name\]/$lowerCaseName/g" $fileVue
sed -i "s/\[组件名称\]/$componentCName/g" $fileReadme

# 修改IFS并进行操作
OLD_IFS="$IFS"
IFS='-'
read -ra arr <<< "$lowerCaseName"
# 循环数组并拼接字符串
capitalCaseName=""
for item in "${arr[@]}"; do
    item=$(echo $item | awk '{print toupper(substr($0,1,1)) substr($0,2)}')
    capitalCaseName=$capitalCaseName$item
done
IFS="$OLD_IFS"

# 替换文件内容
sed -i "s/\[name\]/$capitalCaseName/g" $fileIndexJs

# 修改导出组件文件的内容：加入import语句，以及修改导出语句
importStr="import $capitalCaseName from './components/$lowerCaseName';"
variableStr="    $capitalCaseName"
lineImport=$(grep -n 'import' $fileTopJs | head -1 | cut -d: -f1)
sed -i "${lineImport}i${importStr}" $fileTopJs

lineConst=$(grep -n 'const componentsList' $fileTopJs | awk -F: 'NR==1 {print $1+1}')
sed -i "${lineConst}i\\\
${variableStr}," $fileTopJs

lineExport=$(grep -n 'install,' $fileTopJs | awk -F: 'NR==1 {print $1+1}')
sed -i "${lineExport}i\\\
${variableStr}," $fileTopJs

# 加入测试组件的文件
exampleHomeVue=../examples/views/Home.vue
exampleComponentVue=../examples/views/$capitalCaseName.vue
exampleRouterJS=../examples/router/router.js

# 复制模板文件到examples目录
cp ./example/Example.vue ../examples/views/$capitalCaseName.vue

# 在router.js中加入测试组件
routerPathStr1="        {"
routerPathStr2="            path: '/$lowerCaseName',"
routerPathStr3="            name: '$lowerCaseName',"
routerPathStr4="            component: importPage('$capitalCaseName'),"
routerPathStr5="        },"

lineRouter=$(grep -n 'export default new Router' $exampleRouterJS | awk -F: 'NR==1 {print $1+1}')
lineRouter=$(( $lineRouter - 4 ))
sed -i "${lineRouter}i\\\
${routerPathStr1}" $exampleRouterJS
lineRouter=$(( $lineRouter + 1 ))
sed -i "${lineRouter}i\\\
${routerPathStr2}" $exampleRouterJS
lineRouter=$(( $lineRouter + 1 ))
sed -i "${lineRouter}i\\\
${routerPathStr3}" $exampleRouterJS
lineRouter=$(( $lineRouter + 1 ))
sed -i "${lineRouter}i\\\
${routerPathStr4}" $exampleRouterJS
lineRouter=$(( $lineRouter + 1 ))
sed -i "${lineRouter}i\\\
${routerPathStr5}" $exampleRouterJS

# 在Home.vue中加入测试组件
newComponentPath="        <li><a @click=\"\$router.push('/$lowerCaseName')\">$componentCName</a></li>"
lineHome=$(grep -n '</ul>' $exampleHomeVue | awk -F: 'NR==1 {print $1+1}')
lineHome=$(( $lineHome - 1 ))
sed -i "${lineHome}i\\\
${newComponentPath}" $exampleHomeVue

# 修改examples目录下的页面文件
h1Str="        <h1>$componentCName</h1>"
backHomeStr="        <router-link to=\"/\">返回首页</router-link>"
useComponentStr="        <wy-${lowerCaseName}></wy-${lowerCaseName}>"
lineComponent=$(grep -n '<div>' $exampleComponentVue | awk -F: 'NR==1 {print $1+1}')
sed -i "${lineComponent}i\\\
${h1Str}" $exampleComponentVue

lineComponent=$(( $lineComponent + 1 ))
sed -i "${lineComponent}i\\\
${backHomeStr}" $exampleComponentVue

lineComponent=$(( $lineComponent + 1 ))
sed -i "${lineComponent}i\\\
${useComponentStr}" $exampleComponentVue

# 执行npm start
# npm start