File size: 11,227 Bytes
cca0cf3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
/**

 * @fileoverview Store Exchange & Points Purchasing Controller

 * @module controllers/store-controller

 * @description وحدة التحكم في حاسبة استبدال النقاط التفاعلية وتنفيذ الشراء المباشر والخصم من المحفظة.

 */

(global => {
    'use strict';

    /**

     * تحديث وحساب مخرجات حاسبة شراء النقاط المباشرة

     * @returns {{ totalCostUSD: number, finalFbPoints: number, finalWaPoints: number }}

     */
    const updateInteractiveCalculator = () => {
        const config = global.FritreeStoreConfig;
        if (!config) {
            console.warn("[Fritree Store Calculator] Config module not loaded yet.");
            return { totalCostUSD: 0, finalFbPoints: 0, finalWaPoints: 0 };
        }

        const modeByUsdBtn = document.getElementById('e1kue4bxi8');
        const isUsdMode = modeByUsdBtn ? modeByUsdBtn.classList.contains('vn5qn7dmpk') : true;

        let totalCostUSD = 0;
        let baseFbPoints = 0;
        let baseWaPoints = 0;

        if (isUsdMode) {
            const usdInp = document.getElementById('jkfrigkx79');
            const usdSlider = document.getElementById('d59w7te1vj');
            const splitSlider = document.getElementById('e89vbjxky3');

            let usdVal = parseFloat(usdInp?.value) || 0.01;
            if (usdVal < 0.01) usdVal = 0.01; 
            if (usdVal > 10000) usdVal = 10000;
            totalCostUSD = usdVal;

            if (usdSlider) usdSlider.value = Math.min(10000, usdVal);

            const fbPct = parseInt(splitSlider?.value || '50', 10);
            const waPct = 100 - fbPct;
            const fbUsd = (totalCostUSD * fbPct) / 100;
            const waUsd = (totalCostUSD * waPct) / 100;

            const lblFbPct = document.getElementById('qlifseac5g');
            const lblFbUsd = document.getElementById('kh1jaojo84');
            const lblWaPct = document.getElementById('vsgn1osooh');
            const lblWaUsd = document.getElementById('fjb9lf7u6j');

            if (lblFbPct) lblFbPct.textContent = fbPct.toLocaleString('en-US');
            if (lblFbUsd) lblFbUsd.textContent = fbUsd.toFixed(2);
            if (lblWaPct) lblWaPct.textContent = waPct.toLocaleString('en-US');
            if (lblWaUsd) lblWaUsd.textContent = waUsd.toFixed(2);

            baseFbPoints = Math.round(fbUsd * config.EXCHANGE_RATES.FB);
            baseWaPoints = Math.round(waUsd * config.EXCHANGE_RATES.WA);
        } else {
            const fbPtsInp = document.getElementById('ra4lnuh31g');
            const waPtsInp = document.getElementById('obapd8lbcc');

            baseFbPoints = Math.max(0, parseInt(fbPtsInp?.value, 10) || 0);
            baseWaPoints = Math.max(0, parseInt(waPtsInp?.value, 10) || 0);

            const fbCost = baseFbPoints / config.EXCHANGE_RATES.FB;
            const waCost = baseWaPoints / config.EXCHANGE_RATES.WA;
            totalCostUSD = fbCost + waCost;

            if (totalCostUSD > 10000) {
                totalCostUSD = 10000;
            }
        }

        const finalFbPoints = baseFbPoints;
        const finalWaPoints = baseWaPoints;

        const summaryCost = document.getElementById('xaaobpe28o');
        const summaryBonusPct = document.getElementById('qtmqs3sswp');
        const summaryFbTotal = document.getElementById('xl39vkuv1s');
        const summaryWaTotal = document.getElementById('k7z19dhok1');

        if (summaryCost) summaryCost.innerHTML = `<i class="fa-solid fa-dollar-sign"></i> <span>$${totalCostUSD.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}</span>`;
        if (summaryBonusPct) {
            summaryBonusPct.innerHTML = `<i class="fa-solid fa-tag"></i> <span>تسعير مباشر</span>`;
            summaryBonusPct.style.color = "#64748b";
        }
        if (summaryFbTotal) {
            summaryFbTotal.innerHTML = `<i class="fa-brands fa-facebook"></i> <span>${finalFbPoints.toLocaleString('en-US')} نقطة</span>`;
        }
        if (summaryWaTotal) {
            summaryWaTotal.innerHTML = `<i class="fa-brands fa-whatsapp"></i> <span>${finalWaPoints.toLocaleString('en-US')} نقطة</span>`;
        }

        return {
            totalCostUSD,
            finalFbPoints,
            finalWaPoints
        };
    };

    /**

     * تنفيذ شراء النقاط المخصصة من الحاسبة

     */
    async function executeCustomCalculatorExchange() {
        const config = global.FritreeStoreConfig;
        const calcData = updateInteractiveCalculator();
        const usdCost = calcData.totalCostUSD;

        if (usdCost < 0.01) {
            alert("تنبيه: الحد الأدنى للشراء هو $0.01 (1 سنت)!");
            return;
        }
        if (usdCost > 10000.00) {
            alert("تنبيه: الحد الأقصى للشراء في المرة الواحدة هو $10,000.00 دولار!");
            return;
        }

        const activeBalance = global.FritreeAppState ? global.FritreeAppState.getPoints() : 0.00;
        if (activeBalance < usdCost) {
            alert(`رصيد محفظتك المتاح ($${activeBalance.toFixed(2)}) مش كفاية لإتمام الشراء بتكلفة $${usdCost.toFixed(2)}.\n\nاشحن محفظتك الأول بالدولار.`);
            return;
        }

        const fbPts = calcData.finalFbPoints;
        const waPts = calcData.finalWaPoints;

        let promptMsg = `تأكيد الشراء المباشر للنقاط:\n\nالتكلفة الإجمالية: $${usdCost.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}\n`;
        if (fbPts > 0) promptMsg += `- فيسبوك: +${fbPts.toLocaleString('en-US')}\n`;
        if (waPts > 0) promptMsg += `- واتساب: +${waPts.toLocaleString('en-US')}\n`;
        promptMsg += `\nهل تريد تأكيد العملية والخصم من المحفظة؟`;

        if (confirm(promptMsg)) {
            const descDeduct = `شراء مباشر من المتجر عبر الحاسبة التفاعلية: -$${usdCost.toFixed(2)}`;
            const success = await global.FritreeAppState.deductPoints(usdCost, descDeduct);

            if (success) {
                const balanceAfterTx = activeBalance - usdCost;
                const computedSignature = await config.calculateExchangeSignature('combo', fbPts + waPts, usdCost, balanceAfterTx);
                if (global.FritreeStorage) {
                    await global.FritreeStorage.set('last_exchange_receipt_sig', computedSignature);
                }

                if (fbPts > 0) {
                    const descFb = `شحن نقاط فيسبوك من المتجر: +${fbPts.toLocaleString('en-US')}`;
                    await global.FritreeAppState.addFbCards(fbPts, descFb);
                }
                if (waPts > 0) {
                    const descWa = `شحن نقاط واتساب من المتجر: +${waPts.toLocaleString('en-US')}`;
                    await global.FritreeAppState.addWaCards(waPts, descWa);
                }

                await global.FritreeAppState.saveAccountData();
                if (global.FritreeShellLayout) global.FritreeShellLayout.updatePointsUI();

                const successMsg = `تم الشراء بنجاح!\nتم شحن الأرصدة لمحفظتك الموحدة فوراً.`;
                alert(successMsg);

                if (typeof window.addLog === 'function') {
                    window.addLog(successMsg, 'success');
                }
                if (global.FritreeWallet && typeof global.FritreeWallet.renderLedgerTable === 'function') {
                    await global.FritreeWallet.renderLedgerTable();
                }
            } else {
                alert("خطأ: تعثر خصم الرصيد من المحفظة.");
            }
        }
    }

    /**

     * ربط أحداث حاسبة المتجر

     */
    const bindCalculatorEvents = () => {
        const btnByUsd = document.getElementById('e1kue4bxi8');
        const btnByPts = document.getElementById('oppazp520b');
        const containerUsdMode = document.getElementById('ssaw6xzw1u');
        const containerPtsMode = document.getElementById('ijac87awiy');

        if (btnByUsd && btnByPts) {
            btnByUsd.addEventListener('click', () => {
                btnByUsd.classList.add('vn5qn7dmpk');
                btnByPts.classList.remove('vn5qn7dmpk');
                if (containerUsdMode) containerUsdMode.style.display = 'flex';
                if (containerPtsMode) containerPtsMode.style.display = 'none';
                updateInteractiveCalculator();
            });

            btnByPts.addEventListener('click', () => {
                btnByPts.classList.add('vn5qn7dmpk');
                btnByUsd.classList.remove('vn5qn7dmpk');
                if (containerPtsMode) containerPtsMode.style.display = 'flex';
                if (containerUsdMode) containerUsdMode.style.display = 'none';
                updateInteractiveCalculator();
            });
        }

        const usdInp = document.getElementById('jkfrigkx79');
        const usdSlider = document.getElementById('d59w7te1vj');
        const splitSlider = document.getElementById('e89vbjxky3');

        if (usdInp) {
            usdInp.addEventListener('input', () => {
                let val = parseFloat(usdInp.value) || 0.01;
                if (val > 10000) val = 10000;
                usdInp.value = val;
                updateInteractiveCalculator();
            });
            usdInp.addEventListener('change', updateInteractiveCalculator);
        }

        if (usdSlider) {
            usdSlider.addEventListener('input', (e) => {
                if (usdInp) usdInp.value = parseFloat(e.target.value);
                updateInteractiveCalculator();
            });
        }

        if (splitSlider) {
            splitSlider.addEventListener('input', updateInteractiveCalculator);
        }

        const fbPtsInp = document.getElementById('ra4lnuh31g');
        const waPtsInp = document.getElementById('obapd8lbcc');

        if (fbPtsInp) fbPtsInp.addEventListener('input', updateInteractiveCalculator);
        if (waPtsInp) waPtsInp.addEventListener('input', updateInteractiveCalculator);

        const executeExchangeBtn = document.getElementById('fmkoglcexo');
        if (executeExchangeBtn) {
            executeExchangeBtn.addEventListener('click', executeCustomCalculatorExchange);
        }
    };

    /**

     * تصدير وحدة تحكم المتجر

     */
    global.FritreeStoreCalculator = {
        updateCalculator: updateInteractiveCalculator,
        executeExchange: executeCustomCalculatorExchange,
        bindEvents: bindCalculatorEvents
    };

    if (typeof document !== 'undefined') {
        bindCalculatorEvents();
    }

})(typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : this);