// static/admin/js/content-page-edit.js

// Use centralized logger
const contentPageEditLog = window.LogConfig.loggers.contentPageEdit || window.LogConfig.createLogger('contentPageEdit');

// ============================================
// CONTENT PAGE EDITOR FUNCTION
// ============================================
function contentPageEditor(pageId) {
    return {
        // Inherit base layout functionality from init-alpine.js
        ...data(),

        // Page identifier for sidebar active state
        currentPage: 'content-pages',

        // Editor state
        pageId: pageId,
        form: {
            slug: '',
            title: '',
            content: '',
            content_format: 'html',
            template: 'default',
            meta_description: '',
            meta_keywords: '',
            is_published: false,
            show_in_header: false,
            show_in_footer: true,
            display_order: 0,
            vendor_id: null
        },
        loading: false,
        saving: false,
        error: null,
        successMessage: null,

        // Initialize
        async init() {
            contentPageEditLog.info('=== CONTENT PAGE EDITOR INITIALIZING ===');
            contentPageEditLog.info('Page ID:', this.pageId);

            // Prevent multiple initializations
            if (window._contentPageEditInitialized) {
                contentPageEditLog.warn('Content page editor already initialized, skipping...');
                return;
            }
            window._contentPageEditInitialized = true;

            if (this.pageId) {
                // Edit mode - load existing page
                contentPageEditLog.group('Loading page for editing');
                await this.loadPage();
                contentPageEditLog.groupEnd();
            } else {
                // Create mode - use default values
                contentPageEditLog.info('Create mode - using default form values');
            }

            contentPageEditLog.info('=== CONTENT PAGE EDITOR INITIALIZATION COMPLETE ===');
        },

        // Load existing page
        async loadPage() {
            this.loading = true;
            this.error = null;

            try {
                contentPageEditLog.info(`Fetching page ${this.pageId}...`);

                const response = await apiClient.get(`/admin/content-pages/${this.pageId}`);

                contentPageEditLog.debug('API Response:', response);

                if (!response) {
                    throw new Error('Invalid API response');
                }

                // Handle response - API returns object directly
                const page = response.data || response;
                this.form = {
                    slug: page.slug || '',
                    title: page.title || '',
                    content: page.content || '',
                    content_format: page.content_format || 'html',
                    template: page.template || 'default',
                    meta_description: page.meta_description || '',
                    meta_keywords: page.meta_keywords || '',
                    is_published: page.is_published || false,
                    show_in_header: page.show_in_header || false,
                    show_in_footer: page.show_in_footer !== undefined ? page.show_in_footer : true,
                    display_order: page.display_order || 0,
                    vendor_id: page.vendor_id
                };

                contentPageEditLog.info('Page loaded successfully');

            } catch (err) {
                contentPageEditLog.error('Error loading page:', err);
                this.error = err.message || 'Failed to load page';
            } finally {
                this.loading = false;
            }
        },

        // Save page (create or update)
        async savePage() {
            if (this.saving) return;

            this.saving = true;
            this.error = null;
            this.successMessage = null;

            try {
                contentPageEditLog.info(this.pageId ? 'Updating page...' : 'Creating page...');

                const payload = {
                    slug: this.form.slug,
                    title: this.form.title,
                    content: this.form.content,
                    content_format: this.form.content_format,
                    template: this.form.template,
                    meta_description: this.form.meta_description,
                    meta_keywords: this.form.meta_keywords,
                    is_published: this.form.is_published,
                    show_in_header: this.form.show_in_header,
                    show_in_footer: this.form.show_in_footer,
                    display_order: this.form.display_order,
                    vendor_id: this.form.vendor_id
                };

                contentPageEditLog.debug('Payload:', payload);

                let response;
                if (this.pageId) {
                    // Update existing page
                    response = await apiClient.put(`/admin/content-pages/${this.pageId}`, payload);
                    this.successMessage = 'Page updated successfully!';
                    contentPageEditLog.info('Page updated');
                } else {
                    // Create new page
                    response = await apiClient.post('/admin/content-pages/platform', payload);
                    this.successMessage = 'Page created successfully!';
                    contentPageEditLog.info('Page created');

                    // Redirect to edit page after creation
                    const pageData = response.data || response;
                    if (pageData && pageData.id) {
                        setTimeout(() => {
                            window.location.href = `/admin/content-pages/${pageData.id}/edit`;
                        }, 1500);
                    }
                }

                // Clear success message after 3 seconds
                setTimeout(() => {
                    this.successMessage = null;
                }, 3000);

            } catch (err) {
                contentPageEditLog.error('Error saving page:', err);
                this.error = err.message || 'Failed to save page';

                // Scroll to top to show error
                window.scrollTo({ top: 0, behavior: 'smooth' });
            } finally {
                this.saving = false;
            }
        }
    };
}
