const fs = require('fs')
const ci = require('miniprogram-ci')
const path = require('path')
const projectPath = path.resolve(__dirname, '../')
const CI_DESC = process.env.CI_DESC
console.log('项目路径UNI_MODE', CI_DESC)
// 1. 读取 project.config.json
// 1. 确认文件路径
const projectConfigPath = path.resolve(__dirname, './project.config.json')
console.log('配置文件路径:', projectConfigPath)

// 2. 读取原文件
const projectConfig = JSON.parse(fs.readFileSync(projectConfigPath, 'utf-8'))

// 3. 修改版本号（示例：1.0.0 → 1.0.1）
const versionParts = projectConfig.version.split('.')
versionParts[2] = String(Number(versionParts[2]) + 1)
projectConfig.version = versionParts.join('.')
console.log('版本号:', versionParts)
// 4. 写入前验证
try {
  fs.accessSync(projectConfigPath, fs.constants.W_OK)
  const newContent = JSON.stringify(projectConfig, null, 2)
  fs.writeFileSync(projectConfigPath, newContent, 'utf-8')
  console.log('版本号已更新为:', projectConfig.version)
} catch (err) {
  console.error('操作失败:', err)
  process.exit(1) // 非零退出码表示错误
}
// 获取所有小程序上传密钥文件
const privateList = fs.readdirSync(`${projectPath}/ci/privateKey`)
const uploadInfo = {
  version: projectConfig.version,
  desc: CI_DESC === 'test' ? '测试环境' : CI_DESC === 'prod' ? '生产环境' : '开发环境',
  robot: CI_DESC === 'test' ? 2: 1,
}
const command = process.argv.slice(2)[0]
console.log('privateList', privateList)
privateList.forEach(item => {
  console.log('item', item)
  let appId = item.split('.')[1] // item: private.appId.key
  // 创建项目对象
  const project = new ci.Project({
    appid: appId, // 小程序appid
    type: 'miniProgram', // 类型，小程序或小游戏
    projectPath: `${projectPath}/dist/build/mp-weixin`, // 项目路径
    privateKeyPath: `${projectPath}/ci/privateKey/${item}`, // 密钥路径
    ignores: ['node_modules/**/*'] // 忽略的文件
  })
  let ciFn = null
  if (command === 'upload') {
    ciFn = ci.upload({
      project,
      ...uploadInfo,
      setting: {
        es6: true, // 对应小程序开发者工具的 "es6 转 es5"
        es7: true, // 对应小程序开发者工具的 "增强编译"
        minify: true // 是否压缩代码
      }
    })
  } else if (command === 'preview') {
    ciFn = ci.preview({
      project,
      setting: {
        es6: true, // 对应小程序开发者工具的 "es6 转 es5"
        es7: true // 对应小程序开发者工具的 "增强编译"
      },
      qrcodeFormat: 'image',
      qrcodeOutputDest: `${projectPath}/ci/qrcode/${appId}_qrcode.jpg`,
      onProgressUpdate: console.log
    })
  }
  // 调用
  ciFn
    .then(res => {
      console.log('执行成功', res)
    })
    .catch(error => {
      console.log('执行失败', error)
    })
})
