#!/usr/bin/env node

/**
 * 部署脚本 - 自动配置环境变量和构建项目
 */

const fs = require('fs')
const path = require('path')
const { execSync } = require('child_process')

console.log('🚀 开始部署流程...')

// 检查是否有真实的API服务器
async function checkApiServer(apiUrl) {
  try {
    const fetch = (await import('node-fetch')).default
    const response = await fetch(`${apiUrl}/health`, { 
      timeout: 5000,
      method: 'GET'
    })
    return response.ok
  } catch (error) {
    console.log(`❌ API服务器检查失败: ${error.message}`)
    return false
  }
}

// 读取环境配置
function readEnvFile(filePath) {
  if (!fs.existsSync(filePath)) {
    return {}
  }
  
  const content = fs.readFileSync(filePath, 'utf8')
  const env = {}
  
  content.split('\n').forEach(line => {
    const trimmed = line.trim()
    if (trimmed && !trimmed.startsWith('#')) {
      const [key, ...valueParts] = trimmed.split('=')
      if (key && valueParts.length > 0) {
        env[key.trim()] = valueParts.join('=').trim()
      }
    }
  })
  
  return env
}

// 写入环境配置
function writeEnvFile(filePath, env) {
  const content = Object.entries(env)
    .map(([key, value]) => `${key}=${value}`)
    .join('\n')
  
  fs.writeFileSync(filePath, content + '\n')
}

async function main() {
  // 读取生产环境配置
  const prodEnv = readEnvFile('.env.production')
  const apiUrl = prodEnv.VITE_API_BASE_URL
  
  if (apiUrl) {
    console.log(`🔍 检查API服务器: ${apiUrl}`)
    const isApiAvailable = await checkApiServer(apiUrl.replace('/api', ''))
    
    if (isApiAvailable) {
      console.log('✅ API服务器可用，使用真实API')
      prodEnv.VITE_ENABLE_MOCK = 'false'
    } else {
      console.log('❌ API服务器不可用，启用Mock模式')
      prodEnv.VITE_ENABLE_MOCK = 'true'
    }
  } else {
    console.log('⚠️  未配置API地址，启用Mock模式')
    prodEnv.VITE_ENABLE_MOCK = 'true'
  }
  
  // 更新生产环境配置
  writeEnvFile('.env.production', prodEnv)
  console.log('📝 已更新生产环境配置')
  
  // 构建项目
  console.log('🔨 开始构建项目...')
  try {
    execSync('npm run build', { stdio: 'inherit' })
    console.log('✅ 构建完成！')
    
    // 显示部署信息
    console.log('\n📋 部署信息:')
    console.log(`   Mock模式: ${prodEnv.VITE_ENABLE_MOCK === 'true' ? '启用' : '禁用'}`)
    if (apiUrl) {
      console.log(`   API地址: ${apiUrl}`)
    }
    console.log('   构建文件: ./dist/')
    
  } catch (error) {
    console.error('❌ 构建失败:', error.message)
    process.exit(1)
  }
}

main().catch(error => {
  console.error('❌ 部署失败:', error)
  process.exit(1)
})
