// ============================================================
//  CardRenderer.js  - نسخه نهایی با پشتیبانی از field_name/field_label
// ============================================================

import { ComponentRegistry } from './ComponentRegistry.js';

export class CardRenderer {

    /**
     * رندر کل کارت
     * @param {Object} schema
     * @param {Object} data
     * @returns {string}
     */
    static render(schema, data) {
        if (!schema) {
            console.warn('CardRenderer: schema missing');
            return '';
        }

        let sections = [];

        // اگر card.sections موجود بود از آن استفاده کن
        if (schema.card && Array.isArray(schema.card.sections)) {
            sections = schema.card.sections;
        }
        // در غیر این صورت، از schema.fields سکشن بساز
        else if (Array.isArray(schema.fields)) {
            sections = this.buildSectionsFromFields(schema.fields);
        } else {
            console.warn('CardRenderer: invalid schema structure', schema);
            return '';
        }

        const html = sections
            .map(section => this.renderSection(section, data))
            .join('');

        return `
            <div class="runtime-card">
                ${html}
            </div>
        `;
    }

    /**
     * ساخت سکشن از schema.fields
     */
    static buildSectionsFromFields(fields) {
        if (!Array.isArray(fields)) return [];

        const normalizeField = (f) => {
            const name =
                f.name ??
                f.field ??
                f.key ??
                f.column_name ??
                f.field_name ??
                null;

            const label =
                f.label ??
                f.title ??
                f.caption ??
                f.text ??
                f.field_label ??
                name ??
                '';

            if (!name) return null;

            // ✅ نگه داشتن type و config برای استفاده در FieldListComponent
            return {
                name,
                label,
                type: f.field_type ?? f.type ?? null,
                config: f.config ?? f.field_config ?? null
            };
        };

        const normalizedFields = fields
            .map(normalizeField)
            .filter(Boolean);

        return [{
            type: 'field-list',
            fields: normalizedFields
        }];
    }


    /**
     * رندر یک سکشن با استفاده از ComponentRegistry
     */
    static renderSection(section, data) {
        if (!section || !section.type) {
            console.warn('CardRenderer: invalid section', section);
            return '';
        }

        const component = ComponentRegistry.get(section.type);

        if (!component) {
            console.warn(`CardRenderer: component not found → ${section.type}`);
            return '';
        }

        if (typeof component.render !== 'function') {
            console.warn(`CardRenderer: component has no render() → ${section.type}`);
            return '';
        }

        try {
            return component.render(section, data);
        } catch (error) {
            console.error(`CardRenderer: component render failed → ${section.type}`, error);
            return `<div class="runtime-card-error">⚠️ Render failed for ${section.type}</div>`;
        }
    }
}
