/**
 * Configuration Path Debug Tool
 *
 * Run this to see where config files will be stored in different modes
 * Usage: npx tsx src/main/tools/config-path-debug.ts
 */

import * as path from 'path'

// Simulate different environments
const scenarios = [
  {
    name: 'Development Mode (开发环境)',
    env: {
      NODE_ENV: 'development',
      APP_PACKAGED: 'false'
    },
    appData: 'C:\\Users\\test\\AppData\\Roaming\\erpauto',
    projectRoot: 'D:\\Projects\\ERPAuto'
  },
  {
    name: 'Production - Portable (便携版)',
    env: {
      NODE_ENV: 'production',
      APP_PACKAGED: 'true'
    },
    appData: 'C:\\Users\\test\\AppData\\Roaming\\erpauto',
    projectRoot: 'D:\\Projects\\ERPAuto',
    exeDir: 'D:\\PortableApps\\ERPAuto'
  },
  {
    name: 'Production - Installed (安装版)',
    env: {
      NODE_ENV: 'production',
      APP_PACKAGED: 'true'
    },
    appData: 'C:\\Users\\test\\AppData\\Roaming\\erpauto',
    projectRoot: 'D:\\Projects\\ERPAuto'
  }
]

console.log('╔════════════════════════════════════════════════════════════════╗')
console.log('║         ERPAuto Configuration Path Debug Tool                 ║')
console.log('╚════════════════════════════════════════════════════════════════╝\n')

for (const scenario of scenarios) {
  console.log(`📋 ${scenario.name}`)
  console.log('─'.repeat(60))

  const isDev = scenario.env.NODE_ENV === 'development' || scenario.env.APP_PACKAGED === 'false'

  let configPath: string
  let backupPath: string

  if (isDev) {
    // 开发环境：项目根目录
    configPath = path.join(scenario.projectRoot, 'config.yaml')
    backupPath = path.join(scenario.projectRoot, 'config.yaml.backup')
  } else {
    // 生产环境（便携版和安装版）：用户数据目录
    configPath = path.join(scenario.appData, 'config.yaml')
    backupPath = path.join(scenario.appData, 'config.yaml.backup')
  }

  console.log(`  NODE_ENV: ${scenario.env.NODE_ENV}`)
  console.log(`  APP_PACKAGED: ${scenario.env.APP_PACKAGED}`)
  console.log(`  Is Development: ${isDev ? '✓ Yes' : '✗ No'}`)
  if ('exeDir' in scenario) {
    console.log(`  EXE Directory: ${scenario.exeDir}`)
  }
  console.log(`  → Config Path: ${configPath}`)
  console.log(`  → Backup Path: ${backupPath}`)
  console.log('')
}

console.log('╔════════════════════════════════════════════════════════════════╗')
console.log('║  Configuration Strategy (配置策略):                           ║')
console.log('╚════════════════════════════════════════════════════════════════╝')
console.log(`
┌─────────────┬──────────────────────────────────────────────────────────┐
│   环境      │   配置文件位置                                           │
├─────────────┼──────────────────────────────────────────────────────────┤
│ 开发环境    │  项目根目录\\config.yaml                                  │
│             │  方便编辑和调试，配置随代码版本管理                        │
├─────────────┼──────────────────────────────────────────────────────────┤
│ 生产环境    │  %APPDATA%\\erpauto\\config.yaml                           │
│ (便携版/    │  符合 Windows 规范，应用升级时配置保留，安全               │
│  安装版)    │                                                          │
└─────────────┴──────────────────────────────────────────────────────────┘

💡 优势:
   ✓ 开发时配置在项目根目录，方便版本控制和团队协作
   ✓ 生产环境配置在用户数据目录，应用升级不会丢失配置
   ✓ 配置不暴露在应用目录，更安全
   ✓ 多用户环境下，每个用户有独立的配置
`)

console.log('╔════════════════════════════════════════════════════════════════╗')
console.log('║  Recommended Directory Structure:                             ║')
console.log('╚════════════════════════════════════════════════════════════════╝')
console.log(`
【开发环境】
D:\\Projects\\ERPAuto\\
├── src\\
├── package.json
├── config.yaml           # 开发配置（可加入 .gitignore）
├── config.yaml.backup    # 自动备份
└── config.template.yaml  # 配置模板（提交到版本控制）

【生产环境 - 便携版/安装版】
C:\\Users\\<user>\\AppData\\Roaming\\erpauto\\
├── config.yaml           # 用户配置
└── config.yaml.backup    # 自动备份
`)
