#!/usr/bin/env node

/**
 * 修复版Dayjs Locale功能测试脚本
 * 修复了模块导入路径问题
 */

console.log('=============================================');
console.log('          修复版 Dayjs Locale 测试工具');
console.log('=============================================\n');

// 检查package.json中的dayjs版本
function checkPackageJson() {
    try {
        const fs = require('fs');
        const packageJson = JSON.parse(fs.readFileSync('./package.json', 'utf8'));
        const dayjsVersion = packageJson.dependencies.dayjs;
        console.log(`[版本检查] dayjs版本: ${dayjsVersion}`);
        return dayjsVersion;
    } catch (error) {
        console.log('[版本检查] 无法读取package.json:', error.message);
        return null;
    }
}

// 测试main.js中的dayjs配置
function checkMainJs() {
    try {
        const fs = require('fs');
        const mainJsContent = fs.readFileSync('./src/main.js', 'utf8');
        
        console.log('\n[main.js检查] 查找dayjs配置...');
        
        // 检查dayjs导入
        const hasDayjsImport = mainJsContent.includes('import dayjs from');
        const hasZhCnImport = mainJsContent.includes('zh-cn');
        const hasLocaleConfig = mainJsContent.includes("dayjs.locale('zh-cn')") || 
                             mainJsContent.includes('dayjs.locale(zhCN)');
        const hasConfigProvider = mainJsContent.includes('getDayjsInstance');
        
        console.log(`[main.js检查] ✓ dayjs导入: ${hasDayjsImport}`);
        console.log(`[main.js检查] ✓ 中文语言包导入: ${hasZhCnImport}`);
        console.log(`[main.js检查] ✓ locale配置: ${hasLocaleConfig}`);
        console.log(`[main.js检查] ✓ ConfigProvider配置: ${hasConfigProvider}`);
        
        return {
            hasDayjsImport,
            hasZhCnImport,
            hasLocaleConfig,
            hasConfigProvider
        };
    } catch (error) {
        console.log('[main.js检查] 无法读取main.js:', error.message);
        return null;
    }
}

// 直接在Node环境中测试dayjs
function testDayjsInNode() {
    try {
        console.log('\n[Node环境测试] 开始测试dayjs...');
        
        // 使用CommonJS方式导入，避免ES模块问题
        const dayjs = require('dayjs');
        console.log('[Node环境测试] ✓ 成功加载dayjs库');
        
        // 检查locale方法是否存在
        const hasLocaleMethod = typeof dayjs.locale === 'function';
        console.log(`[Node环境测试] ✓ locale方法: ${hasLocaleMethod ? '存在' : '不存在'}`);
        
        if (!hasLocaleMethod) {
            return false;
        }
        
        // 尝试加载中文语言包
        try {
            require('dayjs/locale/zh-cn');
            console.log('[Node环境测试] ✓ 成功加载中文语言包');
            
            // 设置中文语言
            dayjs.locale('zh-cn');
            const currentLocale = dayjs.locale();
            const formattedDate = dayjs().format('YYYY年MM月DD日 dddd');
            
            console.log(`[Node环境测试] ✓ 当前语言: ${currentLocale}`);
            console.log(`[Node环境测试] ✓ 格式化日期: ${formattedDate}`);
            
            // 测试实例上的locale方法
            const dateInstance = dayjs();
            const hasInstanceLocale = typeof dateInstance.locale === 'function';
            console.log(`[Node环境测试] ✓ 实例locale方法: ${hasInstanceLocale ? '存在' : '不存在'}`);
            
            if (!hasInstanceLocale) {
                return false;
            }
            
            return true;
        } catch (error) {
            console.log(`[Node环境测试] ✗ 加载中文语言包失败: ${error.message}`);
            return false;
        }
    } catch (error) {
        console.log(`[Node环境测试] ✗ 测试失败: ${error.message}`);
        return false;
    }
}

// 创建简单的HTML测试文件
function createSimpleTestHtml() {
    try {
        const fs = require('fs');
        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>
    <script src="http://127.0.0.1:3002/node_modules/dayjs/dayjs.min.js"></script>
    <script src="http://127.0.0.1:3002/node_modules/dayjs/locale/zh-cn.js"></script>
    <style>
        body { font-family: sans-serif; padding: 20px; }
        .success { color: green; }
        .error { color: red; }
    </style>
</head>
<body>
    <h1>Dayjs 快速测试</h1>
    <div id="results"></div>
    
    <script>
        const results = document.getElementById('results');
        let success = true;
        
        try {
            // 测试1: dayjs是否加载
            if (window.dayjs) {
                results.innerHTML += '<p class="success">✓ dayjs已加载</p>';
            } else {
                results.innerHTML += '<p class="error">✗ dayjs未加载</p>';
                success = false;
            }
            
            // 测试2: locale方法是否存在
            if (typeof dayjs.locale === 'function') {
                results.innerHTML += '<p class="success">✓ locale方法存在</p>';
            } else {
                results.innerHTML += '<p class="error">✗ locale方法不存在</p>';
                success = false;
            }
            
            // 测试3: 设置中文语言
            try {
                dayjs.locale('zh-cn');
                results.innerHTML += '<p class="success">✓ 成功设置中文语言</p>';
                results.innerHTML += '<p>当前语言: ' + dayjs.locale() + '</p>';
            } catch (e) {
                results.innerHTML += '<p class="error">✗ 设置中文语言失败: ' + e.message + '</p>';
                success = false;
            }
            
            // 测试4: 格式化日期
            try {
                const formatted = dayjs().format('YYYY年MM月DD日 dddd');
                results.innerHTML += '<p class="success">✓ 格式化日期: ' + formatted + '</p>';
            } catch (e) {
                results.innerHTML += '<p class="error">✗ 格式化日期失败: ' + e.message + '</p>';
                success = false;
            }
            
            // 测试5: 实例上的locale方法
            try {
                const date = dayjs();
                if (typeof date.locale === 'function') {
                    results.innerHTML += '<p class="success">✓ 实例上的locale方法存在</p>';
                } else {
                    results.innerHTML += '<p class="error">✗ 实例上的locale方法不存在</p>';
                    success = false;
                }
            } catch (e) {
                results.innerHTML += '<p class="error">✗ 测试实例locale方法失败: ' + e.message + '</p>';
                success = false;
            }
            
            // 最终结论
            if (success) {
                results.innerHTML += '<h3 class="success">🎉 测试成功！\'date4.locale is not a function\' 错误已解决</h3>';
            } else {
                results.innerHTML += '<h3 class="error">❌ 测试失败！\'date4.locale is not a function\' 错误仍然存在</h3>';
            }
        } catch (e) {
            results.innerHTML += '<p class="error">✗ 发生未预期的错误: ' + e.message + '</p>';
        }
    </script>
</body>
</html>`;
        
        fs.writeFileSync('./public/simple_dayjs_test.html', htmlContent);
        console.log('\n[HTML测试] 已创建快速测试页面: public/simple_dayjs_test.html');
        console.log('[HTML测试] 请访问: http://127.0.0.1:3002/simple_dayjs_test.html');
    } catch (error) {
        console.log(`[HTML测试] 无法创建测试页面: ${error.message}`);
    }
}

// 报告测试结果
function reportResults(packageCheck, mainJsCheck, nodeTestResult) {
    console.log('\n=============================================');
    console.log('📊 测试结果汇总');
    console.log('=============================================');
    
    let overallSuccess = true;
    
    // 检查package.json
    if (packageCheck && !packageCheck.startsWith('1.11')) {
        console.log('❌ dayjs版本可能不兼容: ' + packageCheck);
        overallSuccess = false;
    }
    
    // 检查main.js配置
    if (mainJsCheck) {
        if (!mainJsCheck.hasDayjsImport || !mainJsCheck.hasZhCnImport || 
            !mainJsCheck.hasLocaleConfig || !mainJsCheck.hasConfigProvider) {
            console.log('❌ main.js中的dayjs配置不完整');
            overallSuccess = false;
        }
    }
    
    // 检查Node环境测试
    if (!nodeTestResult) {
        console.log('❌ Node环境中的dayjs测试失败');
        overallSuccess = false;
    }
    
    // 最终结论
    if (overallSuccess) {
        console.log('\n🎉 恭喜！所有测试基本通过');
        console.log('✅ dayjs库的locale功能正常工作');
        console.log('✅ 建议: 请在浏览器中访问以下URL进行最终验证:');
        console.log('   1. http://127.0.0.1:3002/simple_dayjs_test.html');
        console.log('   2. http://127.0.0.1:3002/date-picker-test');
    } else {
        console.log('\n❌ 测试失败！\'date4.locale is not a function\' 错误仍然存在');
        console.log('\n修复建议:');
        console.log('1. 确保main.js中的配置正确:');
        console.log('   - import dayjs from \'dayjs\'');
        console.log('   - import \'dayjs/locale/zh-cn\'');
        console.log('   - dayjs.locale(\'zh-cn\')');
        console.log('   - ConfigProvider中的dateFormatter设置为\'dayjs\'');
        console.log('   - ConfigProvider中的getDayjsInstance返回正确的dayjs实例');
        console.log('2. 重新安装依赖: npm install');
        console.log('3. 重启前端服务: npm run dev');
    }
    
    console.log('=============================================');
}

// 运行所有测试
const packageCheck = checkPackageJson();
const mainJsCheck = checkMainJs();
const nodeTestResult = testDayjsInNode();
createSimpleTestHtml();
reportResults(packageCheck, mainJsCheck, nodeTestResult);

// 如果整体测试失败，设置退出码为1
if (!nodeTestResult) {
    process.exit(1);
}