import { readdirSync } from 'fs';
import { join, basename } from 'path';
import { Sequelize } from 'sequelize';
import { sequelize } from '../config/sequelize';

const basenameFile = basename(__filename);
const models: { [key: string]: any } = {};

const initModels = (sequelize: Sequelize) => {
  const files = readdirSync(__dirname).filter(
    file => file !== basenameFile
  );
  for (const file of files) {
    const modelModule = require(join(__dirname, file));
    const model = modelModule[Object.keys(modelModule)[0]];
    model.initModel && model.initModel(sequelize);
    models[model.name] = model;
  }

  // Setup associations
  Object.values(models).forEach((model: any) => {
    if (model.associate) {
      model.associate(models);
    }
  });

  return models;
};

const Models = initModels(sequelize);

export { sequelize }; // ✅ Export sequelize for transaction use
export default Models;
