/**
 * 同步 job_postings 表结构
 * 用于创建或更新数据库表
 */

const Sequelize = require('sequelize');

// 加载配置
const config = require('../config/config');
const dbConfig = config.db;

async function syncJobPostingsTable() {
    console.log('🔄 开始同步 job_postings 表结构...\n');

    try {
        // 创建 Sequelize 实例
        const sequelize = new Sequelize(
            dbConfig.database,
            dbConfig.username,
            dbConfig.password,
            {
                host: dbConfig.host,
                port: dbConfig.port,
                dialect: dbConfig.dialect,
                logging: false
            }
        );

        // 测试连接
        await sequelize.authenticate();
        console.log('✅ 数据库连接成功\n');

        // 加载模型定义
        const job_postings = require('../api/model/job_postings')(sequelize);

        // 同步表结构（alter: true 会自动添加缺失的字段，保留现有数据）
        console.log('⚠️  注意：使用 alter: true 模式同步（保留现有数据）');
        console.log('如果需要完全重建表，请修改为 force: true\n');

        await job_postings.sync({ alter: true });

        console.log('✅ job_postings 表同步成功！\n');

        // 显示表结构
        const tableInfo = await sequelize.query(
            `DESCRIBE job_postings`,
            { type: Sequelize.QueryTypes.SELECT }
        );

        console.log('📋 当前表结构：');
        console.table(tableInfo.map(field => ({
            字段名: field.Field,
            类型: field.Type,
            允许空: field.Null,
            默认值: field.Default
        })));

        // 检查关键字段
        const requiredFields = [
            'id',
            'sn_code',
            'platform',
            'keyword',
            'encryptBossId',
            'jobId',
            'jobTitle',
            'companyId',
            'companyName',
            'companySize',
            'companyIndustry',
            'salary',
            'jobRequirements',
            'jobDescription',
            'location',
            'experience',
            'education',
            'aiMatchScore',
            'applyStatus',
            'chatStatus',
            'originalData'
        ];
        const existingFields = tableInfo.map(f => f.Field);

        console.log('\n🔍 检查关键字段：');
        const missingFields = [];
        requiredFields.forEach(field => {
            const exists = existingFields.includes(field);
            console.log(`  ${exists ? '✅' : '❌'} ${field}`);
            if (!exists) {
                missingFields.push(field);
            }
        });

        if (missingFields.length > 0) {
            console.log('\n⚠️  缺少以下字段:', missingFields.join(', '));
            console.log('建议：重新运行同步或手动添加这些字段');
        } else {
            console.log('\n✅ 所有必需字段都存在！');
        }

        // 关闭连接
        await sequelize.close();

    } catch (error) {
        console.error('❌ 同步失败:', error.message);
        console.error('\n详细错误:', error);
    }
}

// 执行同步
syncJobPostingsTable()
    .then(() => {
        console.log('\n✨ 同步完成！');
        process.exit(0);
    })
    .catch(error => {
        console.error('\n💥 执行失败:', error);
        process.exit(1);
    });

