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

const loyaltyCardDetailLog = window.LogConfig.loggers.loyaltyCardDetail || window.LogConfig.createLogger('loyaltyCardDetail');

function storeLoyaltyCardDetail() {
    return {
        ...data(),
        currentPage: 'cards',

        cardId: null,
        card: null,
        transactions: [],

        loading: false,
        error: null,

        async init() {
            loyaltyCardDetailLog.info('=== LOYALTY CARD DETAIL PAGE INITIALIZING ===');
            if (window._loyaltyCardDetailInitialized) return;
            window._loyaltyCardDetailInitialized = true;

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

            // Extract card ID from URL
            const pathParts = window.location.pathname.split('/');
            const cardsIndex = pathParts.indexOf('cards');
            if (cardsIndex !== -1 && pathParts[cardsIndex + 1]) {
                this.cardId = parseInt(pathParts[cardsIndex + 1]);
            }

            if (!this.cardId) {
                this.error = 'Invalid card ID';
                return;
            }

            await this.loadData();
            loyaltyCardDetailLog.info('=== LOYALTY CARD DETAIL PAGE INITIALIZATION COMPLETE ===');
        },

        async loadData() {
            this.loading = true;
            this.error = null;

            try {
                await Promise.all([
                    this.loadCard(),
                    this.loadTransactions()
                ]);
            } catch (error) {
                loyaltyCardDetailLog.error('Failed to load data:', error);
                this.error = error.message;
            } finally {
                this.loading = false;
            }
        },

        async loadCard() {
            const response = await apiClient.get(`/store/loyalty/cards/${this.cardId}`);
            if (response) {
                this.card = response;
                loyaltyCardDetailLog.info('Card loaded:', this.card.card_number);
            }
        },

        async loadTransactions() {
            try {
                const response = await apiClient.get(`/store/loyalty/cards/${this.cardId}/transactions?limit=50`);
                if (response && response.transactions) {
                    this.transactions = response.transactions;
                    loyaltyCardDetailLog.info(`Loaded ${this.transactions.length} transactions`);
                }
            } catch (error) {
                loyaltyCardDetailLog.warn('Failed to load transactions:', error.message);
            }
        },

        formatNumber(num) {
            return num == null ? '0' : new Intl.NumberFormat('en-US').format(num);
        },

        formatDate(dateString) {
            if (!dateString) return '-';
            try {
                return new Date(dateString).toLocaleDateString('en-US', {
                    year: 'numeric', month: 'short', day: 'numeric'
                });
            } catch (e) { return dateString; }
        },

        formatDateTime(dateString) {
            if (!dateString) return '-';
            try {
                return new Date(dateString).toLocaleString('en-US', {
                    year: 'numeric', month: 'short', day: 'numeric',
                    hour: '2-digit', minute: '2-digit'
                });
            } catch (e) { return dateString; }
        }
    };
}

if (!window.LogConfig.loggers.loyaltyCardDetail) {
    window.LogConfig.loggers.loyaltyCardDetail = window.LogConfig.createLogger('loyaltyCardDetail');
}
loyaltyCardDetailLog.info('Loyalty card detail module loaded');
