// File: src/resources/index.js

import { loadHumanResources } from './human.js';
import { loadEquipmentResources } from './equipment.js';
import { loadMaterialResources } from './material.js';
import { loadOtherResources } from './other.js';
import { loadAssignments } from './assignment.js';
import { loadFinancialData } from './financial.js';

/**
 * لود تمامی داده‌های مربوط به منابع و مالی از projectData
 * @param {Object} state
 * @param {Object} projectData
 */
export function loadResourcesAndFinancial(state, projectData) {
    // منابع
    if (Array.isArray(projectData.resources)) {
        // تنظیم اولیه
        state.resources.byId = {};
        state.resources.byType = {
            human: [],
            equipment: [],
            material: [],
            financial: [],
            other: []
        };

        // فرض: هر resource یک فیلد type دارد: 'human', 'equipment', 'material', 'financial', 'other'
        projectData.resources.forEach(res => {
            const id = res.id;
            if (!id) return;

            const type = res.type || 'other';

            // ثبت کلی در resources.byId
            state.resources.byId[id] = {
                id,
                type,
                code: res.code ?? '',
                name: res.name ?? '',
                description: res.description ?? '',
                // فیلدهای عمومی دیگر
                isActive: res.is_active ?? true
            };

            if (!state.resources.byType[type]) {
                state.resources.byType[type] = [];
            }
            state.resources.byType[type].push(id);

            // سپس به ماژول نوعی می‌دهیم تا فیلدهای اختصاصی را در ساختار خودش نگه دارد
        });

        // تقسیم بر اساس type
        loadHumanResources(state, projectData);
        loadEquipmentResources(state, projectData);
        loadMaterialResources(state, projectData);
        loadOtherResources(state, projectData);
        // منابع مالی خاص (به‌جز آیتم‌های مالی پروژه) را هم می‌توانیم بعداً در همین یا ماژول جدا ببینیم
    }

    // تخصیص‌ها (Task ← Resource)
    loadAssignments(state, projectData);

    // آیتم‌های مالی، هزینه‌ها، و cashflow
    loadFinancialData(state, projectData);
}
