import { Sequelize, DataTypes } from 'sequelize';
import config from '../config/config';
import UserModel from './User';
import RoleMasterModel from './role_master';
import TaskModel from './Task';
import TaskHistoryModel from './TaskHistory';
import ProjectMasterModel from './project_master';
import ClientMasterModel from './client_master';
import PlanModel from './Plan';
import FollowUpModel from './follow_up';
import FollowUpLogModel from './follow_up_logs';
import TrackexNotificationModel from './trackex_notifications';
import NotificationHistoryModel from './notification_histories';
import TaskWatchModel from './task_watchers';
import ProjectRoleModel from './project_role_masters';
import ProjectStaffModel from './project_staffings';

const env = process.env.NODE_ENV || 'development';
const dbConfig = config[env];

const sequelize = new Sequelize(
    dbConfig.database,
    dbConfig.username,
    dbConfig.password || '',
    {
        host: dbConfig.host,
        dialect: 'postgres',
        logging: true // Enable logging temporarily to debug
    }
);

const db: any = {};

// Initialize models
const User = UserModel(sequelize, DataTypes);
const RoleMaster = RoleMasterModel(sequelize, DataTypes);
const Task = TaskModel(sequelize, DataTypes);
const TaskHistory = TaskHistoryModel(sequelize, DataTypes);
const ProjectMaster = ProjectMasterModel(sequelize, DataTypes);
const ClientMaster = ClientMasterModel(sequelize, DataTypes);
const Plan = PlanModel(sequelize, DataTypes);
const FollowUp = FollowUpModel(sequelize, DataTypes);
const FollowUpLog = FollowUpLogModel(sequelize, DataTypes);
const TrackexNotification = TrackexNotificationModel(sequelize, DataTypes);
const NotificationHistory = NotificationHistoryModel(sequelize, DataTypes);
const TaskWatcher = TaskWatchModel(sequelize, DataTypes);
const ProjectRoleMaster = ProjectRoleModel(sequelize, DataTypes);
const ProjectStaffing = ProjectStaffModel(sequelize, DataTypes);

db.sequelize = sequelize;
db.Sequelize = Sequelize;
db.User = User;
db.RoleMaster = RoleMaster;
db.Task = Task;
db.TaskHistory = TaskHistory;
db.ProjectMaster = ProjectMaster;
db.ClientMaster = ClientMaster;
db.Plan = Plan;
db.FollowUp = FollowUp;
db.FollowUpLog = FollowUpLog;
db.TrackexNotification = TrackexNotification;
db.NotificationHistory = NotificationHistory;
db.TaskWatcher = TaskWatcher;
db.ProjectRoleMaster = ProjectRoleMaster;
db.ProjectStaffing = ProjectStaffing;

// Initialize associations
Object.keys(db).forEach((modelName) => {
    if (db[modelName].associate) {
        db[modelName].associate(db);
    }
});

// Debug log
// console.log('Models loaded:', Object.keys(db));
// console.log('User associations:', Object.keys(db.User.associations || {}));

export default db;
