/**
 * 政府后端模型索引文件
 * @file index.js
 * @description 导出所有模型并建立关联关系
 */
const { sequelize } = require('../config/database');

// 导入所有模型
const User = require('./User');
const AdminStaff = require('./AdminStaff');
const Department = require('./Department');
const Position = require('./Position');
const Farmer = require('./Farmer');
const HarmlessPlace = require('./HarmlessPlace');
const HarmlessRegistration = require('./HarmlessRegistration');
const Material = require('./Material');
const Slaughterhouse = require('./Slaughterhouse');
const EpidemicAgency = require('./EpidemicAgency');
const SmartCollar = require('./SmartCollar');
const SmartEarmark = require('./SmartEarmark');
const SmartHost = require('./SmartHost');
const WarehouseTransaction = require('./WarehouseTransaction');

// 初始化所有模型
const initModels = () => {
  try {
    // 处理直接导出的模型
    if (User && typeof User !== 'function') {
      // User模型已经直接导出，不需要额外处理
    }
    
    // 处理需要sequelize参数的模型
    const modelsToInit = [
      AdminStaff,
      Department,
      Position,
      Farmer,
      HarmlessPlace,
      HarmlessRegistration,
      Material,
      Slaughterhouse,
      EpidemicAgency,
      SmartCollar,
      SmartEarmark,
      SmartHost,
      WarehouseTransaction
    ];
    
    // 初始化模型
    modelsToInit.forEach(modelFactory => {
      if (typeof modelFactory === 'function') {
        // 调用函数获取模型实例
        const model = modelFactory(sequelize);
        // 将初始化后的模型赋值回原来的变量
        Object.assign(module.exports, { [model.name]: model });
      }
    });
    
    console.log('✅ 所有政府后端模型初始化完成');
  } catch (error) {
    console.error('❌ 政府后端模型初始化失败:', error);
  }
};

// 初始化模型
initModels();

// 导出sequelize和所有模型
module.exports = {
  sequelize,
  User,
  AdminStaff,
  Department,
  Position,
  Farmer,
  HarmlessPlace,
  HarmlessRegistration,
  Material,
  Slaughterhouse,
  EpidemicAgency,
  SmartCollar,
  SmartEarmark,
  SmartHost,
  WarehouseTransaction
};

// 同步所有模型到数据库（可选）
const syncModels = async (options = {}) => {
  try {
    await sequelize.sync(options);
    console.log('✅ 政府后端所有模型已同步到数据库');
    return true;
  } catch (error) {
    console.error('❌ 政府后端模型同步失败:', error);
    return false;
  }
};

// 添加syncModels到导出
module.exports.syncModels = syncModels;