// app/modules/loyalty/static/store/js/loyalty-enroll.js
// noqa: js-006 - async init pattern is safe, loadData has try/catch

const loyaltyEnrollLog = window.LogConfig.loggers.loyaltyEnroll || window.LogConfig.createLogger('loyaltyEnroll');

function storeLoyaltyEnroll() {
    return {
        ...data(),
        currentPage: 'terminal',

        program: null,
        form: {
            first_name: '',
            last_name: '',
            email: '',
            phone: '',
            birthday: '',
            marketing_email: false,
            marketing_sms: false
        },

        enrolling: false,
        enrolledCard: null,
        loading: false,
        error: null,

        async init() {
            loyaltyEnrollLog.info('=== LOYALTY ENROLL PAGE INITIALIZING ===');
            if (window._loyaltyEnrollInitialized) return;
            window._loyaltyEnrollInitialized = true;

            // IMPORTANT: Call parent init first to set storeCode from URL
            const parentInit = data().init;
            if (parentInit) {
                await parentInit.call(this);
            }

            await this.loadProgram();
            loyaltyEnrollLog.info('=== LOYALTY ENROLL PAGE INITIALIZATION COMPLETE ===');
        },

        async loadProgram() {
            this.loading = true;
            try {
                const response = await apiClient.get('/store/loyalty/program');
                if (response) {
                    this.program = response;
                    loyaltyEnrollLog.info('Program loaded:', this.program.display_name);
                }
            } catch (error) {
                if (error.status === 404) {
                    loyaltyEnrollLog.warn('No program configured');
                } else {
                    this.error = error.message;
                }
            } finally {
                this.loading = false;
            }
        },

        async enrollCustomer() {
            if (!this.form.first_name || !this.form.email) return;

            this.enrolling = true;

            try {
                loyaltyEnrollLog.info('Enrolling customer:', this.form.email);

                const response = await apiClient.post('/store/loyalty/cards/enroll', {
                    email: this.form.email,
                    customer_phone: this.form.phone || null,
                    customer_name: [this.form.first_name, this.form.last_name].filter(Boolean).join(' '),
                    customer_birthday: this.form.birthday || null,
                    marketing_email_consent: this.form.marketing_email,
                    marketing_sms_consent: this.form.marketing_sms
                });

                if (response) {
                    this.enrolledCard = response;
                    loyaltyEnrollLog.info('Customer enrolled successfully:', response.card_number);
                }
            } catch (error) {
                Utils.showToast(I18n.t('loyalty.store.enroll.enrollment_failed', {message: error.message}), 'error');
                loyaltyEnrollLog.error('Enrollment failed:', error);
            } finally {
                this.enrolling = false;
            }
        },

        resetForm() {
            this.form = {
                first_name: '',
                last_name: '',
                email: '',
                phone: '',
                birthday: '',
                marketing_email: false,
                marketing_sms: false
            };
        }
    };
}

if (!window.LogConfig.loggers.loyaltyEnroll) {
    window.LogConfig.loggers.loyaltyEnroll = window.LogConfig.createLogger('loyaltyEnroll');
}
loyaltyEnrollLog.info('Loyalty enroll module loaded');
