#!/usr/bin/env node

/**
 * 简单的Dayjs错误修复检查工具
 */

console.log('=============================================');
console.log('          Dayjs 错误修复检查工具');
console.log('=============================================\n');

// 检查修复状态的主要函数
async function checkFixStatus() {
    try {
        // 使用ES模块的fs
        const fs = (await import('fs/promises')).default;
        
        // 1. 检查package.json中的依赖
        console.log('[1] 检查项目依赖...');
        const packageJson = JSON.parse(await fs.readFile('./package.json', 'utf8'));
        const dayjsVersion = packageJson.dependencies.dayjs;
        const antdVersion = packageJson.dependencies['ant-design-vue'];
        
        console.log(`- dayjs版本: ${dayjsVersion}`);
        console.log(`- antd版本: ${antdVersion}`);
        
        // 2. 检查main.js中的dayjs配置
        console.log('\n[2] 检查main.js中的dayjs配置...');
        const mainJs = await fs.readFile('./src/main.js', 'utf8');
        
        // 检查关键配置
        const hasDayjsImport = mainJs.includes('import dayjs from');
        const hasZhCnImport = mainJs.includes('zh-cn');
        const hasCorrectLocale = mainJs.includes("dayjs.locale('zh-cn')");
        const hasConfigProvider = mainJs.includes('ConfigProvider');
        const hasDateFormatter = mainJs.includes("dateFormatter: 'dayjs'");
        const hasGetDayjsInstance = mainJs.includes('getDayjsInstance');
        
        console.log(`- dayjs导入: ${hasDayjsImport ? '✅ 存在' : '❌ 缺失'}`);
        console.log(`- 中文语言包: ${hasZhCnImport ? '✅ 存在' : '❌ 缺失'}`);
        console.log(`- 正确的locale配置: ${hasCorrectLocale ? '✅ 正确' : '❌ 错误'}`);
        console.log(`- ConfigProvider: ${hasConfigProvider ? '✅ 存在' : '❌ 缺失'}`);
        console.log(`- dateFormatter设置: ${hasDateFormatter ? '✅ 正确' : '❌ 错误'}`);
        console.log(`- getDayjsInstance: ${hasGetDayjsInstance ? '✅ 存在' : '❌ 缺失'}`);
        
        // 3. 分析问题和提供修复建议
        console.log('\n[3] 问题分析和修复建议...');
        
        let fixSuggestions = [];
        
        if (!hasDayjsImport) {
            fixSuggestions.push('在main.js顶部添加: import dayjs from \'dayjs\'');
        }
        
        if (!hasZhCnImport) {
            fixSuggestions.push('添加中文语言包导入: import \'dayjs/locale/zh-cn\'');
        }
        
        if (!hasCorrectLocale) {
            fixSuggestions.push('修正locale配置: dayjs.locale(\'zh-cn\')');
        }
        
        if (!hasConfigProvider) {
            fixSuggestions.push('添加ConfigProvider组件并配置dayjs');
        }
        
        if (!hasDateFormatter) {
            fixSuggestions.push('在ConfigProvider中设置: dateFormatter: \'dayjs\'');
        }
        
        if (!hasGetDayjsInstance) {
            fixSuggestions.push('在ConfigProvider中添加getDayjsInstance配置');
        }
        
        // 4. 生成修复代码
        console.log('\n[4] 推荐的修复代码...');
        
        const fixCode = `// 在main.js中的修复代码
import dayjs from 'dayjs';
import 'dayjs/locale/zh-cn'; // 导入中文语言包
import zhCN from 'ant-design-vue/es/locale/zh_CN';
import { ConfigProvider } from 'ant-design-vue';

// 配置dayjs
const zhCnLocale = require('dayjs/locale/zh-cn');
dayjs.extend(zhCnLocale);
dayjs.locale('zh-cn'); // 使用字符串形式的locale

// 配置全局dayjs实例
app.config.globalProperties.$dayjs = dayjs;

// 在ConfigProvider中配置
app.use(ConfigProvider, {
  locale: zhCN,
  dateFormatter: 'dayjs', // 明确指定dateFormatter
  getDayjsInstance: () => dayjs, // 返回配置好的dayjs实例
  getPopupContainer: (trigger) => {
    if (trigger && trigger.parentNode) {
      return trigger.parentNode;
    }
    return document.body;
  }
});`;
        
        console.log('\n建议的修复代码:');
        console.log(fixCode);
        
        // 5. 提供最终验证步骤
        console.log('\n[5] 验证步骤...');
        console.log('1. 应用上述修复代码');
        console.log('2. 重新安装依赖: npm install');
        console.log('3. 重启前端服务: npm run dev');
        console.log('4. 访问测试页面: http://127.0.0.1:3002/date-picker-test');
        console.log('5. 打开浏览器控制台，检查是否有\'date4.locale is not a function\'错误');
        
        // 6. 创建简单的测试HTML文件
        await createSimpleTestHtml(fs);
        
        // 7. 最终结论
        console.log('\n=============================================');
        console.log('📋 修复总结');
        console.log('=============================================');
        
        if (fixSuggestions.length === 0) {
            console.log('🎉 看起来配置已经正确！请按照验证步骤确认错误是否已解决。');
        } else {
            console.log('❌ 发现以下问题需要修复:');
            fixSuggestions.forEach((suggestion, index) => {
                console.log(`${index + 1}. ${suggestion}`);
            });
            console.log('\n请按照推荐的修复代码和验证步骤操作。');
        }
        
        process.exit(0);
    } catch (error) {
        console.error('\n❌ 检查过程中发生错误:', error.message);
        process.exit(1);
    }
}

// 创建简单的测试HTML文件
async function createSimpleTestHtml(fs) {
    try {
        const htmlContent = `<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Dayjs 错误修复验证</title>
    <style>
        body { font-family: sans-serif; padding: 20px; max-width: 800px; margin: 0 auto; }
        h1 { color: #1890ff; }
        .step { margin: 20px 0; padding: 15px; border-left: 4px solid #1890ff; background: #f0f7ff; }
        .success { color: #52c41a; }
        .error { color: #ff4d4f; }
        code { background: #f5f5f5; padding: 2px 5px; border-radius: 3px; }
    </style>
</head>
<body>
    <h1>Dayjs 错误修复验证</h1>
    
    <div class="step">
        <h2>验证步骤</h2>
        <p>请按照以下步骤验证 'date4.locale is not a function' 错误是否已修复:</p>
        <ol>
            <li>确保前端服务已启动: <code>npm run dev</code></li>
            <li>打开浏览器开发者工具的控制台</li>
            <li>访问日期选择器测试页面: <a href="/date-picker-test" target="_blank">/date-picker-test</a></li>
            <li>在测试页面中尝试使用日期选择器组件</li>
            <li>检查控制台是否有错误信息</li>
        </ol>
    </div>
    
    <div class="step">
        <h2>成功标志</h2>
        <p class="success">✅ 如果日期选择器能正常工作，且控制台没有 'date4.locale is not a function' 错误，则修复成功！</p>
    </div>
    
    <div class="step">
        <h2>失败处理</h2>
        <p class="error">❌ 如果错误仍然存在，请重新检查main.js中的配置是否完全正确。</p>
        <p>特别注意:</p>
        <ul>
            <li>确保使用 <code>dayjs.locale('zh-cn')</code> 而不是 <code>dayjs.locale(zhCN)</code></li>
            <li>确保ConfigProvider中设置了 <code>dateFormatter: 'dayjs'</code></li>
            <li>确保ConfigProvider中配置了 <code>getDayjsInstance: () => dayjs</code></li>
        </ul>
    </div>
</body>
</html>`;
        
        await fs.writeFile('./public/verify_fix.html', htmlContent);
        console.log('\n已创建验证页面: public/verify_fix.html');
        console.log('请访问: http://127.0.0.1:3002/verify_fix.html');
    } catch (error) {
        console.log(`创建验证页面失败: ${error.message}`);
    }
}

// 运行检查
checkFixStatus();