// static/admin/js/user-create.js

// Create custom logger for admin user create
const userCreateLog = window.LogConfig.createLogger('ADMIN-USER-CREATE');

function adminUserCreate() {
    return {
        // Inherit base layout functionality from init-alpine.js
        ...data(),

        // Admin user create page specific state
        currentPage: 'admin-users',
        loading: false,
        formData: {
            username: '',
            email: '',
            password: '',
            first_name: '',
            last_name: '',
            role: 'platform_admin',
            platform_ids: []
        },
        platforms: [],
        errors: {},
        saving: false,

        // Initialize
        async init() {
            // Load i18n translations
            await I18n.loadModule('tenancy');

            userCreateLog.info('=== ADMIN USER CREATE PAGE INITIALIZING ===');

            // Prevent multiple initializations
            if (window._userCreateInitialized) {
                userCreateLog.warn('Admin user create page already initialized, skipping...');
                return;
            }
            window._userCreateInitialized = true;

            // Load platforms for admin assignment
            await this.loadPlatforms();

            userCreateLog.info('=== ADMIN USER CREATE PAGE INITIALIZATION COMPLETE ===');
        },

        // Load available platforms
        async loadPlatforms() {
            try {
                userCreateLog.debug('Loading platforms...');
                const response = await apiClient.get('/admin/platforms');
                this.platforms = response.platforms || response.items || [];
                userCreateLog.debug(`Loaded ${this.platforms.length} platforms`);
            } catch (error) {
                userCreateLog.error('Failed to load platforms:', error);
                this.platforms = [];
            }
        },

        // Validate form
        validateForm() {
            this.errors = {};

            if (!this.formData.username.trim()) {
                this.errors.username = 'Username is required';
            }
            if (!this.formData.email.trim()) {
                this.errors.email = 'Email is required';
            }
            if (!this.formData.password || this.formData.password.length < 6) {
                this.errors.password = 'Password must be at least 6 characters';
            }

            // Platform admin validation: must have at least one platform
            if (this.formData.role !== 'super_admin') {
                if (!this.formData.platform_ids || this.formData.platform_ids.length === 0) {
                    this.errors.platform_ids = 'Platform admins must be assigned to at least one platform';
                }
            }

            return Object.keys(this.errors).length === 0;
        },

        // Submit form
        async handleSubmit() {
            userCreateLog.info('=== CREATING ADMIN USER ===');
            userCreateLog.debug('Form data:', { ...this.formData, password: '[REDACTED]' });

            if (!this.validateForm()) {
                userCreateLog.warn('Validation failed:', this.errors);
                Utils.showToast(I18n.t('tenancy.messages.please_fix_the_errors_before_submitting'), 'error');
                return;
            }

            this.saving = true;

            try {
                // Use admin-users endpoint for creating admin users
                const url = '/admin/admin-users';
                const payload = {
                    email: this.formData.email,
                    username: this.formData.username,
                    password: this.formData.password,
                    first_name: this.formData.first_name || null,
                    last_name: this.formData.last_name || null,
                    role: this.formData.role,
                    platform_ids: this.formData.role === 'super_admin' ? [] : this.formData.platform_ids.map(id => parseInt(id))
                };

                window.LogConfig.logApiCall('POST', url, { ...payload, password: '[REDACTED]' }, 'request');

                const startTime = performance.now();
                const response = await apiClient.post(url, payload);
                const duration = performance.now() - startTime;

                window.LogConfig.logApiCall('POST', url, response, 'response');
                window.LogConfig.logPerformance('Create Admin User', duration);

                const userType = this.formData.role === 'super_admin' ? 'Super admin' : 'Platform admin';
                Utils.showToast(`${userType} created successfully`, 'success');
                userCreateLog.info(`${userType} created successfully in ${duration}ms`, response);

                // Redirect to the admin users list
                setTimeout(() => {
                    window.location.href = `/admin/admin-users/${response.id}`;
                }, 1500);

            } catch (error) {
                window.LogConfig.logError(error, 'Create Admin User');

                // Handle validation errors
                if (error.details && error.details.validation_errors) {
                    error.details.validation_errors.forEach(err => {
                        const field = err.loc?.[1] || err.loc?.[0];
                        if (field) {
                            this.errors[field] = err.msg;
                        }
                    });
                    userCreateLog.debug('Validation errors:', this.errors);
                }

                // Handle specific errors
                if (error.message) {
                    if (error.message.includes('Email already')) {
                        this.errors.email = 'This email is already registered';
                    } else if (error.message.includes('Username already')) {
                        this.errors.username = 'This username is already taken';
                    }
                }

                Utils.showToast(error.message || 'Failed to create admin user', 'error');
            } finally {
                this.saving = false;
                userCreateLog.info('=== ADMIN USER CREATION COMPLETE ===');
            }
        }
    };
}

userCreateLog.info('Admin user create module loaded');
