<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>AdCashFlow - Earn Rewards</title>

    <!-- Font Awesome for Icons -->

    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.css">

    <style>

        :root {

            --primary-color: #0d1b2a; --secondary-color: #1b263b; --accent-color-yellow: #ffd700;

            --accent-color-blue: #00aaff; --text-color-light: #ffffff; --border-color: #415a77;

        }

        body, html { margin: 0; padding: 0; font-family: 'Segoe UI', sans-serif; background-color: var(--primary-color); color: var(--text-color-light); overflow-x: hidden; }

        .app-container { display: flex; flex-direction: column; min-height: 100vh; padding-bottom: 70px; }

        .app-header { display: flex; justify-content: space-between; align-items: center; padding: 10px 15px; background-color: var(--secondary-color); border-bottom: 2px solid var(--border-color); position: sticky; top: 0; z-index: 1000; }

        .header-user { display: flex; align-items: center; }

        .user-logo { width: 40px; height: 40px; border-radius: 50%; background-color: var(--accent-color-blue); display: flex; justify-content: center; align-items: center; font-weight: bold; color: var(--primary-color); margin-right: 10px; }

        .user-name { font-size: 1.1em; font-weight: 600; }

        .header-center { position: absolute; left: 50%; transform: translateX(-50%); font-size: 1.2em; font-weight: bold; }

        .header-coins { background-color: var(--primary-color); padding: 8px 15px; border-radius: 20px; font-weight: bold; border: 1px solid var(--accent-color-yellow); }

        .header-coins .fa-coins { color: var(--accent-color-yellow); margin-right: 8px; }

        main { flex-grow: 1; padding: 15px; }

        .page { display: none; }

        .page.active { display: block; }

        .auth-container { max-width: 400px; margin: 50px auto; padding: 30px; background-color: var(--secondary-color); border-radius: 10px; text-align: center; box-shadow: 0 4px 15px rgba(0,0,0,0.3); }

        .auth-container h2 { color: var(--accent-color-yellow); margin-bottom: 25px; }

        .auth-container .input-group { margin-bottom: 20px; }

        .auth-container input { width: 100%; padding: 12px; background-color: var(--primary-color); border: 1px solid var(--border-color); border-radius: 5px; color: var(--text-color-light); box-sizing: border-box; }

        .auth-container button { width: 100%; padding: 12px; background-color: var(--accent-color-blue); border: none; border-radius: 5px; color: var(--text-color-light); font-size: 1em; font-weight: bold; cursor: pointer; }

        .auth-container .switch-form { margin-top: 20px; font-size: 0.9em; }

        .auth-container .switch-form a { color: var(--accent-color-yellow); text-decoration: none; font-weight: bold; cursor: pointer; }

        .social-ad-container { width: 100%; aspect-ratio: 16 / 9; background-color: var(--secondary-color); border-radius: 10px; display: flex; justify-content: center; align-items: center; position: relative; overflow: hidden; margin-bottom: 20px; }

        .social-ad-container .ad-notice { position: absolute; top: 5px; background: rgba(0,0,0,0.6); color: var(--accent-color-yellow); padding: 5px 10px; border-radius: 5px; font-size: 0.8em; }

        .home-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 15px; }

        .grid-item { background-color: var(--secondary-color); padding: 20px; border-radius: 10px; text-align: center; font-size: 1.1em; font-weight: 600; cursor: pointer; transition: transform 0.2s; border: 1px solid var(--border-color); }

        .grid-item:hover { transform: translateY(-5px); border-color: var(--accent-color-yellow); }

        .grid-item i { font-size: 2.5em; margin-bottom: 10px; color: var(--accent-color-blue); }

        .spinner-container { display: flex; flex-direction: column; align-items: center; justify-content: center; margin-top: 20px; }

        .spinner-wrapper { position: relative; width: 300px; height: 300px; }

        .spinner-pointer { position: absolute; top: -5px; left: 50%; transform: translateX(-50%); width: 0; height: 0; border-left: 20px solid transparent; border-right: 20px solid transparent; border-top: 30px solid var(--accent-color-yellow); z-index: 10; }

        .spinner-wheel { width: 100%; height: 100%; border-radius: 50%; border: 5px solid var(--border-color); background: conic-gradient(#4CAF50 0 45deg, #f44336 0 90deg, #2196F3 0 135deg, #FF9800 0 180deg, #9C27B0 0 225deg, #795548 0 270deg, #FFEB3B 0 315deg, #607D8B 0 360deg); transition: transform 5s cubic-bezier(0.25, 0.1, 0.25, 1); position: relative; }

        .spinner-prize { position: absolute; width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; font-weight: bold; font-size: 1.2em; color: white; text-shadow: 1px 1px 2px black; }

        .spinner-prize:nth-child(1) { transform: rotate(22.5deg) translateY(-105px); } .spinner-prize:nth-child(2) { transform: rotate(67.5deg) translateY(-105px); }

        .spinner-prize:nth-child(3) { transform: rotate(112.5deg) translateY(-105px); } .spinner-prize:nth-child(4) { transform: rotate(157.5deg) translateY(-105px); }

        .spinner-prize:nth-child(5) { transform: rotate(202.5deg) translateY(-105px); } .spinner-prize:nth-child(6) { transform: rotate(247.5deg) translateY(-105px); }

        .spinner-prize:nth-child(7) { transform: rotate(292.5deg) translateY(-105px); color: black; text-shadow: none; } .spinner-prize:nth-child(8) { transform: rotate(337.5deg) translateY(-105px); }

        .spin-button { margin-top: 30px; padding: 15px 40px; font-size: 1.5em; font-weight: bold; cursor: pointer; border-radius: 50px; border: none; background-color: var(--accent-color-blue); color: white; }

        .spin-button:disabled { background-color: #555; cursor: not-allowed; }

        .ad-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: 15px; }

        .ad-card { background: var(--secondary-color); border-radius: 8px; padding: 15px; text-align: center; border: 1px solid var(--border-color); }

        .ad-card h3 { margin-top: 0; color: var(--accent-color-blue); }

        .ad-card .watch-button { background-color: var(--accent-color-yellow); color: var(--primary-color); padding: 10px 20px; border-radius: 5px; font-weight: bold; cursor: pointer; }

        .ad-card .watch-button:disabled { background-color: #555; cursor: not-allowed; color: #aaa; }

        .daily-reward-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin-bottom: 20px; }

        .reward-day { background-color: var(--secondary-color); padding: 15px; border-radius: 8px; text-align: center; border: 2px solid var(--border-color); }

        .reward-day.claimable { border-color: var(--accent-color-yellow); cursor: pointer; }

        .reward-day.claimed { opacity: 0.6; } .reward-day-coins { color: var(--accent-color-yellow); font-size: 1.2em; margin: 10px 0;}

        .streak-bonus { background-color: var(--accent-color-yellow); color: var(--primary-color); padding: 20px; border-radius: 10px; text-align: center; font-size: 1.2em; font-weight: bold; }

        .earn-coins-box { background: var(--secondary-color); padding: 40px; border-radius: 15px; text-align: center; margin-top: 50px; }

        .earn-coins-button { padding: 15px 30px; font-size: 1.3em; border-radius: 10px; background-color: var(--accent-color-blue); color: white; cursor: pointer; border: none; }

        .referral-box, .extra-rewards-box { background-color: var(--secondary-color); padding: 20px; border-radius: 10px; margin-bottom: 20px; }

        .referral-link-container { display: flex; align-items: center; margin-top: 10px; }

        #referralLink { flex-grow: 1; padding: 10px; background-color: var(--primary-color); border: 1px solid var(--border-color); color: white; border-radius: 5px 0 0 5px; }

        #copyBtn { padding: 10px; border: none; background-color: var(--accent-color-yellow); color: var(--primary-color); border-radius: 0 5px 5px 0; cursor: pointer; }

        .reward-table { width: 100%; border-collapse: collapse; margin-top: 15px; }

        .reward-table td { padding: 12px; border-bottom: 1px solid var(--border-color); }

        .reward-table .claim-btn { background-color: var(--accent-color-blue); color: white; padding: 8px 12px; border: none; border-radius: 5px; cursor: pointer; }

        .reward-table .claim-btn:disabled { background-color: #555; }

        .wallet-balance-card { text-align: center; color: var(--primary-color); background: linear-gradient(to right, #005aa7, #fffde4); padding: 30px; border-radius: 15px; }

        .wallet-balance-card .balance { font-size: 3em; font-weight: bold; margin: 10px 0; }

        .withdraw-button { width: 100%; padding: 15px; margin-top: 25px; font-size: 1.2em; background-color: var(--accent-color-blue); color: white; border: none; border-radius: 8px; cursor: pointer; }

        .wallet-instructions { margin-top: 25px; background-color: var(--secondary-color); padding: 15px; border-radius: 8px; font-size: 0.9em; }

        #withdrawHistory table { width: 100%; margin-top: 10px; border-collapse: collapse; }

        #withdrawHistory th, #withdrawHistory td { padding: 8px; text-align: left; border-bottom: 1px solid var(--border-color); }

        #withdrawHistory th { color: var(--accent-color-yellow); }

        .status-pending { color: #ffc107; }

        .status-complete { color: #28a745; }

        .withdraw-options { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 15px; }

        .withdraw-option { background-color: var(--secondary-color); padding: 15px; border-radius: 8px; text-align: center; cursor: pointer; }

        .settings-list .list-item { background-color: var(--secondary-color); padding: 15px; margin-bottom: 10px; border-radius: 8px; display: flex; justify-content: space-between; align-items: center; }

        #logoutBtn, #deleteBtn { padding: 10px 20px; border-radius: 5px; border: none; color: white; font-weight: bold; cursor: pointer; flex:1; }

        #logoutBtn { background-color: #ffc107; } #deleteBtn { background-color: #dc3545; }

        .app-footer { position: fixed; bottom: 0; left: 0; width: 100%; display: flex; justify-content: space-around; background-color: var(--secondary-color); padding: 10px 0; border-top: 1px solid var(--border-color); }

        .footer-icon { cursor: pointer; font-size: 1.8em; color: var(--text-color-light); }

        .footer-icon.active { color: var(--accent-color-yellow); }

        .modal-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0,0,0,0.7); display: none; justify-content: center; align-items: center; z-index: 2000; }

        .modal-content { background-color: var(--secondary-color); padding: 30px; border-radius: 10px; text-align: center; width: 90%; max-width: 400px; }

        #timerDisplay { font-size: 3em; font-weight: bold; margin: 15px 0; color: var(--accent-color-blue); }

        .modal-close-btn { padding: 10px 20px; border: none; border-radius: 5px; margin-top: 10px; cursor: pointer; background-color: var(--accent-color-blue); color: white; }

    </style>

</head>

<body>

    <div id="auth-section">

        <div id="signupPage" class="page active"><div class="auth-container"><div style="font-size: 2.5em; margin-bottom: 20px;">LOGO</div><h2>Create Account</h2><form onsubmit="event.preventDefault(); handleSignUp();"><div class="input-group"><input type="text" id="signupName" placeholder="Full Name" required></div><div class="input-group"><input type="text" id="signupUsername" placeholder="Username" required></div><div class="input-group"><input type="email" id="signupEmail" placeholder="Gmail" required></div><div class="input-group"><input type="password" id="signupPassword" placeholder="Password" required></div><div class="input-group"><input type="password" id="signupConfirmPassword" placeholder="Confirm Password" required></div><button type="submit">Sign Up</button></form><p class="switch-form">Already have an account? <a onclick="showAuthPage('loginPage')">Click Here to Login</a></p></div></div>

        <div id="loginPage" class="page"><div class="auth-container"><div style="font-size: 2.5em; margin-bottom: 20px;">LOGO</div><h2>Login</h2><form onsubmit="event.preventDefault(); handleLogin();"><div class="input-group"><input type="email" id="loginEmail" placeholder="Gmail" required></div><div class="input-group"><input type="password" id="loginPassword" placeholder="Password" required></div><button type="submit">Login</button></form><p class="switch-form">Don't have an account? <a onclick="showAuthPage('signupPage')">Click Here to Sign Up</a></p></div></div>

    </div>


    <div id="app-section" style="display: none;">

        <div class="app-container">

            <header class="app-header"><div class="header-user"><div class="user-logo">U</div><span class="user-name">User</span></div><div class="header-center"><span id="pageTitle">Dashboard</span></div><div class="header-coins"><i class="fas fa-coins"></i> <span id="coinBalance">0</span></div></header>

            <main>

                <section id="homePage" class="page active"><div class="social-ad-container"><span class="ad-notice">Click here to get Double rewards</span><script type='text/javascript' src='//immediatelydoghead.com/c2/f0/62/c2f062781513390b7d23b71ac087f688.js'></script></div><div class="home-grid"><div class="grid-item" onclick="showPage('spinnerPage', 'Spinner')"><i class="fas fa-dharmachakra"></i><div>Spinner</div></div><div class="grid-item" onclick="showPage('watchEarnPage', 'Watch & Earn')"><i class="fas fa-video"></i><div>Watch & Earn</div></div><div class="grid-item" onclick="showPage('viewWinPage', 'View & Win')"><i class="fas fa-eye"></i><div>View & Win</div></div><div class="grid-item" onclick="showPage('dailyRewardPage', 'Daily Reward')"><i class="fas fa-calendar-day"></i><div>Daily Reward</div></div><div class="grid-item" onclick="showPage('earnCoinsPage', 'Earn Coins')"><i class="fas fa-coins"></i><div>Earn Coins</div></div><div class="grid-item" onclick="showPage('viewAndEarnPage', 'View And Earn')"><i class="fas fa-hand-holding-usd"></i><div>View And Earn</div></div></div></section>

                <section id="spinnerPage" class="page"><div class="spinner-container"><div class="spinner-wrapper"><div class="spinner-pointer"></div><div class="spinner-wheel"><div class="spinner-prize">50</div><div class="spinner-prize">20</div><div class="spinner-prize">70</div><div class="spinner-prize">0</div><div class="spinner-prize">5</div><div class="spinner-prize" style="font-size: 1em;">Try Again</div><div class="spinner-prize">10</div><div class="spinner-prize">40</div></div></div><button class="spin-button" id="spinBtn">SPIN</button><p style="margin-top: 20px;">You have 1 spin remaining today.</p></div></section>

                <section id="watchEarnPage" class="page"><h2>Watch Ads to Earn 25 Coins (20s)</h2><div class="ad-grid" id="watchEarnGrid"></div></section>

                <section id="viewWinPage" class="page"><h2>View Ads to Earn 20 Coins (15s)</h2><div class="ad-grid" id="viewWinGrid"></div></section>

                <section id="dailyRewardPage" class="page"><h2>Daily Login Streak</h2><div class="daily-reward-grid" id="dailyRewardGrid"></div><div class="streak-bonus">Complete 7 Days Streak for an Extra 1000 Coins Bonus!</div></section>

                <section id="earnCoinsPage" class="page"><div class="earn-coins-box"><h2>Earn 30 Coins Now!</h2><p>Click the button below and watch the ad for 20 seconds.</p<button class="earn-coins-button" onclick="startRewardProcess(30, 'https://carryglanced.com/ayk98b7xi0?key=da32474edb843b790fc76b9ddad26531', 20, this)">EARN COINS</button></div></section>

                <section id="viewAndEarnPage" class="page"><div class="earn-coins-box"><h2>View and Earn 30 Coins!</h2><p>Click the button below and watch the ad for 20 seconds.</p><button class="earn-coins-button" onclick="startRewardProcess(30, 'https://carryglanced.com/u712kb79c?key=6a8608b755075a58b80b9b0019d8327a', 20, this)">VIEW & EARN</button></div></section>

                <section id="referPage" class="page"><div class="referral-box"><h2>Invite Friends, Earn More!</h2><p>Earn 200 coins for every friend who joins using your link.</p><div class="referral-link-container"><input type="text" id="referralLink" value="" readonly><button id="copyBtn"><i class="fas fa-copy"></i></button></div></div><div class="extra-rewards-box"><h3>Extra Rewards</h3><table class="reward-table"><tr><td>10 Invites</td><td>500 Coins</td><td><button class="claim-btn" disabled>Claim</button></td></tr><tr><td>20 Invites</td><td>1000 Coins</td><td><button class="claim-btn" disabled>Claim</button></td></tr><tr><td>30 Invites</td><td>2000 Coins</td><td><button class="claim-btn" disabled>Claim</button></td></tr><tr><td>50 Invites</td><td>5000 Coins</td><td><button class="claim-btn" disabled>Claim</button></td></tr><tr><td>75 Invites</td><td>10000 Coins</td><td><button class="claim-btn" disabled>Claim</button></td></tr><tr><td>100 Invites</td><td>$5</td><td><button class="claim-btn" disabled>Claim</button></td></tr><tr><td>150 Invites</td><td>$10</td><td><button class="claim-btn" disabled>Claim</button></td></tr><tr><td>250 Invites</td><td>$20</td><td><button class="claim-btn" disabled>Claim</button></td></tr><tr><td>500 Invites</td><td>$50</td><td><button class="claim-btn" disabled>Claim</button></td></tr></table></div></section>

                <section id="walletPage" class="page"><div class="wallet-balance-card"><h3>Total Balance</h3><div class="balance"><i class="fas fa-coins"></i> <span id="walletCoinBalance">0</span></div><p>10000 coins = 250 PKR / ~$1</p></div><button class="withdraw-button" onclick="showPage('withdrawFormPage', 'Withdraw')">Withdraw</button><div class="wallet-instructions"><h3>Instructions:</h3><ul><li>Minimum withdrawal is 10,000 coins.</li><li>Withdrawal processing time is 3-4 business days.</li></ul></div><div id="withdrawHistory"><h3>Withdraw History</h3><p>No history yet.</p></div></section>

                <section id="withdrawFormPage" class="page"><h2>Select Payment Method</h2><div class="withdraw-options"><div class="withdraw-option" onclick="selectPayment('Easypaisa')">Easypaisa</div><div class="withdraw-option" onclick="selectPayment('Jazzcash')">Jazzcash</div><div class="withdraw-option" onclick="selectPayment('UPaisa')">UPaisa</div><div class="withdraw-option" onclick="selectPayment('Binance')">Binance</div><div class="withdraw-option" onclick="selectPayment('Payeer')">Payeer</div><div class="withdraw-option" onclick="selectPayment('UPI')">UPI</div><div class="withdraw-option" onclick="selectPayment('Paytm')">Paytm</div></div><div id="withdrawFormContainer" style="margin-top:20px;"></div></section>

                <section id="settingsPage" class="page"><h2>Settings</h2><div class="settings-list"><div class="list-item"><div><i class="fas fa-user"></i> Username</div><div id="settingUsername"></div></div><div class="list-item"><div><i class="fas fa-at"></i> Email</div><div id="settingEmail"></div></div></div><div style="margin-top: 30px; display: flex; gap: 10px;"><button id="logoutBtn">Logout</button><button id="deleteBtn">Delete Account</button></div></section>

            </main>

        </div>

        <footer class="app-footer"><div class="footer-icon active" onclick="showPage('homePage', 'Dashboard')"><i class="fas fa-home"></i></div><div class="footer-icon" onclick="showPage('referPage', 'Refer & Earn')"><i class="fas fa-user-plus"></i></div><div class="footer-icon" onclick="showPage('walletPage', 'Wallet')"><i class="fas fa-wallet"></i></div><div class="footer-icon" onclick="showPage('settingsPage', 'Settings')"><i class="fas fa-cog"></i></div></footer>

    </div>

    <div class="modal-overlay" id="timerModal"><div class="modal-content"><h3 id="modalTitle">Claiming Reward...</h3><div id="timerDisplay">15</div><p>Please wait... Returning early will cancel the reward.</p></div></div>

    <div class="modal-overlay" id="popupModal"><div class="modal-content"><h3 id="popupTitle"></h3><p id="popupMessage"></p><button class="modal-close-btn" id="popupOkBtn">OK</button></div></div>


    <!-- Firebase SDKs -->

    <script src="https://www.gstatic.com/firebasejs/8.10.1/firebase-app.js"></script>

    <script src="https://www.gstatic.com/firebasejs/8.10.1/firebase-auth.js"></script>

    <script src="https://www.gstatic.com/firebasejs/8.10.1/firebase-firestore.js"></script>


    <script>

        // --- START OF FIREBASE INTEGRATION ---

        const firebaseConfig = {

            apiKey: "AIzaSyBx9fnQdZXT8v0a0Rj3L5svKaaaZPgKrWI",

            authDomain: "adcashflow-2b35f.firebaseapp.com",

            databaseURL: "https://adcashflow-2b35f-default-rtdb.asia-southeast1.firebasedatabase.app",

            projectId: "adcashflow-2b35f",

            storageBucket: "adcashflow-2b35f.appspot.com",

            messagingSenderId: "456266460647",

            appId: "1:456266460647:web:c45b14ad90fd9167ce6142"

        };

        firebase.initializeApp(firebaseConfig);

        const auth = firebase.auth();

        const db = firebase.firestore();

        let currentUser = null;

        // --- END OF FIREBASE INTEGRATION ---



        // --- GLOBAL STATE & CONFIG ---

        let user = { name: null, email: null, coins: 0 };

        let timerInterval;

        let isSpinning = false;

        const spinnerPrizes = [50, 20, 70, 0, 5, 'Try Again', 10, 40];


        // --- DOM ELEMENTS ---

        const authSection = document.getElementById('auth-section'), appSection = document.getElementById('app-section');

        const pages = appSection.querySelectorAll('.page'), authPages = authSection.querySelectorAll('.page');

        const pageTitleEl = document.getElementById('pageTitle'), coinBalanceEl = document.getElementById('coinBalance');

        const walletCoinBalanceEl = document.getElementById('walletCoinBalance'), userNameEl = appSection.querySelector('.user-name');

        const userLogoEl = appSection.querySelector('.user-logo'), spinBtn = document.getElementById('spinBtn');

        const spinnerWheel = document.querySelector('.spinner-wheel'), modalPopup = document.getElementById('popupModal');

        const modalTimer = document.getElementById('timerModal');

        

        // --- CORE FUNCTIONS ---

        const showPage = (pageId, pageTitle) => {

            pages.forEach(p => p.classList.remove('active'));

            document.getElementById(pageId)?.classList.add('active');

            pageTitleEl.textContent = pageTitle;

            const icons = document.querySelectorAll('.footer-icon');

            icons.forEach(icon => {

                icon.classList.toggle('active', icon.getAttribute('onclick').includes(`'${pageId}'`));

            });

            if (pageId === 'walletPage') {

                loadWithdrawHistory();

            }

        };

        const showAuthPage = (pageId) => {

            authPages.forEach(p => p.classList.remove('active'));

            document.getElementById(pageId)?.classList.add('active');

        };

        const updateCoinDisplay = () => { coinBalanceEl.textContent = user.coins; walletCoinBalanceEl.textContent = user.coins; };

        const showPopup = (title, msg) => {

            modalPopup.querySelector('#popupTitle').textContent = title;

            modalPopup.querySelector('#popupMessage').textContent = msg;

            modalPopup.style.display = 'flex';

        };


        // --- REWARD PROCESS (FIXED) ---

        const startRewardProcess = (reward, adUrl, duration, elementToDisable) => {

            // NOTE: The visibility change listener that caused the "navigated away" error has been removed.

            

            if (typeof reward !== 'number' || reward < 0) { // Allow 0 coin reward for "Try Again"

                if (reward <= 0) {

                     showPopup('Better Luck Next Time!', 'You received no coins.');

                }

                 if (elementToDisable) {

                     elementToDisable.disabled = true;

                     if(elementToDisable.classList.contains('spin-button')) elementToDisable.textContent = "Spin Tomorrow";

                 }

                return;

            }

            

            window.open(adUrl, '_blank');

            modalTimer.style.display = 'flex';

            let countdown = duration;

            modalTimer.querySelector('#timerDisplay').textContent = countdown;


            timerInterval = setInterval(() => {

                countdown--;

                modalTimer.querySelector('#timerDisplay').textContent = countdown;

                if (countdown <= 0) {

                    clearInterval(timerInterval);

                    modalTimer.style.display = 'none';


                    // Update coins in Firebase

                    const newCoinTotal = user.coins + reward;

                    db.collection('users').doc(currentUser.uid).update({

                        coins: newCoinTotal

                    }).then(() => {

                        user.coins = newCoinTotal; // Update local state

                        updateCoinDisplay();

                        showPopup('Congratulations!', `You have received ${reward} coins!`);

                    }).catch(error => {

                        console.error("Error updating coins: ", error);

                        showPopup('Error', 'Could not update your coins.');

                    });


                    if (elementToDisable) {

                        elementToDisable.disabled = true;

                        if(elementToDisable.classList.contains('watch-button')) elementToDisable.textContent = 'Watched';

                        if(elementToDisable.classList.contains('reward-day')) elementToDisable.classList.add('claimed');

                        if(elementToDisable.classList.contains('spin-button')) elementToDisable.textContent = "Spin Tomorrow";

                    }

                }

            }, 1000);

        };


        // --- AUTHENTICATION ---

        const handleSignUp = () => {

            const name = document.getElementById('signupName').value.trim();

            const username = document.getElementById('signupUsername').value.trim();

            const email = document.getElementById('signupEmail').value.trim();

            const password = document.getElementById('signupPassword').value;

            const confirmPassword = document.getElementById('signupConfirmPassword').value;

            if (password !== confirmPassword) {

                showPopup('Error', 'Passwords do not match.');

                return;

            }

            if (!username || !email || !name) {

                showPopup('Error', 'Please fill all fields');

                return;

            }

            auth.createUserWithEmailAndPassword(email, password)

                .then((userCredential) => {

                    const firebaseUser = userCredential.user;

                    return db.collection('users').doc(firebaseUser.uid).set({

                        name: name,

                        username: username,

                        email: email,

                        coins: 0

                    });

                })

                .then(() => {

                    showPopup('Success', 'Account created successfully! You will be logged in.');

                })

                .catch((error) => {

                    showPopup('Sign Up Failed', error.message);

                });

        };

        const handleLogin = () => {

            const email = document.getElementById('loginEmail').value.trim();

            const password = document.getElementById('loginPassword').value;

            auth.signInWithEmailAndPassword(email, password)

                .catch((error) => {

                    showPopup('Login Failed', error.message);

                });

        };

        const launchApp = (userData) => {

            user = userData;

            authSection.style.display = 'none';

            appSection.style.display = 'block';

            userNameEl.textContent = user.username;

            userLogoEl.textContent = user.username.charAt(0).toUpperCase();

            document.getElementById('settingUsername').textContent = user.username;

            document.getElementById('settingEmail').textContent = user.email;

            document.getElementById('referralLink').value = `https://adcashflow.blogspot.com/?ref=${user.username.toLowerCase().replace(/\s+/g, '')}`;

            updateCoinDisplay();

        };

        auth.onAuthStateChanged(firebaseUser => {

            if (firebaseUser) {

                currentUser = firebaseUser;

                db.collection('users').doc(firebaseUser.uid).get().then(doc => {

                    if (doc.exists) {

                        launchApp(doc.data());

                    } else {

                        console.error("No such document in Firestore!");

                        auth.signOut();

                    }

                }).catch(error => {

                    console.error("Error getting user data:", error);

                    auth.signOut();

                });

            } else {

                currentUser = null;

                authSection.style.display = 'block';

                appSection.style.display = 'none';

            }

        });

        

        // --- SPINNER LOGIC ---

        const handleSpin = () => {

            if (isSpinning) return;

            isSpinning = true; spinBtn.disabled = true; spinBtn.textContent = "Spinning...";

            const randomDegree = Math.floor(Math.random() * 360) + 360 * 5;

            spinnerWheel.style.transform = `rotate(${randomDegree}deg)`;

            setTimeout(() => {

                const actualDegree = randomDegree % 360;

                const winningSliceIndex = Math.floor((360 - actualDegree) / 45) % 8;

                const spinResult = spinnerPrizes[winningSliceIndex];

                // Pass the button element to disable it correctly

                startRewardProcess(spinResult, 'https://carryglanced.com/p1vzea2p?key=9b76d24017de9dd6f77a6fea80267999', 15, spinBtn);

            }, 5000);

        };


        // --- ADS & REWARDS GENERATION ---

        const generateAdGrid = (containerId, adLinks, reward, duration) => {

            const container = document.getElementById(containerId); container.innerHTML = '';

            for (let i = 0; i < 20; i++) {

                const card = document.createElement('div'); card.className = 'ad-card';

                card.innerHTML = `<h3>Ad #${i + 1}</h3><p>Earn ${reward} coins</p><button class="watch-button">Watch</button>`;

                card.querySelector('button').onclick = (e) => startRewardProcess(reward, adLinks[i % adLinks.length], duration, e.target);

                container.appendChild(card);

            }

        };

        const generateDailyRewards = () => {

            const container = document.getElementById('dailyRewardGrid'); container.innerHTML = '';

            const rewards = [5, 10, 15, 20, 25, 35, 50];

            for (let i = 0; i < 7; i++) {

                const dayDiv = document.createElement('div'); dayDiv.className = 'reward-day';

                dayDiv.innerHTML = `<div class="reward-day-number">Day ${i+1}</div><div class="reward-day-coins"><i class="fas fa-coins"></i> ${rewards[i]}</div>`;

                if(i === 0) {

                    dayDiv.classList.add('claimable');

                    dayDiv.onclick = (e) => startRewardProcess(rewards[i], 'https://immediatelydoghead.com/kwxz3m3w6j?key=8b94db6163debab55f595efb7484ad66', 15, e.currentTarget);

                }

                container.appendChild(dayDiv);

            }

        };

        

        // --- WALLET ---

        const selectPayment = (method) => {

            const container = document.getElementById('withdrawFormContainer');

            container.innerHTML = `<hr><h3>Withdraw via ${method}</h3><p>Enter details below:</p>

            <div class="input-group"><input type="text" id="withdrawAccountNum" placeholder="Account Number / ID" required></div>

            <div class="input-group"><input type="text" id="withdrawAccountName" placeholder="Account Title / Name" required></div>

            <div class="input-group"><input type="number" id="withdrawAmount" placeholder="Coins to Withdraw (min 10000)" required></div>

            <button onclick="submitWithdraw('${method}')">Submit Request</button>`;

        };


        const submitWithdraw = (method) => {

            const amountEl = document.getElementById('withdrawAmount');

            const accountNumEl = document.getElementById('withdrawAccountNum');

            const accountNameEl = document.getElementById('withdrawAccountName');

            const amount = parseInt(amountEl.value, 10);

            const accountNumber = accountNumEl.value.trim();

            const accountName = accountNameEl.value.trim();

            if (isNaN(amount) || !accountNumber || !accountName) {

                showPopup('Error', 'Please fill all the fields correctly.');

                return;

            }

            if (amount < 10000) {

                showPopup('Error', 'Minimum withdrawal amount is 10,000 coins.');

                return;

            }

            if (amount > user.coins) {

                showPopup('Error', 'You do not have enough coins for this withdrawal.');

                return;

            }

            db.collection('withdrawRequests').add({

                userId: currentUser.uid,

                email: user.email,

                username: user.username,

                amount: amount,

                paymentMethod: method,

                accountDetails: { number: accountNumber, name: accountName },

                status: 'pending',

                timestamp: firebase.firestore.FieldValue.serverTimestamp()

            })

            .then(() => {

                const newBalance = user.coins - amount;

                return db.collection('users').doc(currentUser.uid).update({ coins: newBalance });

            })

            .then(() => {

                showPopup('Success', 'Your withdrawal request has been submitted successfully.');

                user.coins -= amount;

                updateCoinDisplay();

                showPage('walletPage', 'Wallet');

            })

            .catch((error) => {

                console.error("Error submitting withdrawal request: ", error);

                showPopup('Error', 'There was a problem submitting your request. Please try again.');

            });

        };


        const loadWithdrawHistory = () => {

            const historyContainer = document.getElementById('withdrawHistory');

            historyContainer.innerHTML = '<h3>Withdraw History</h3>';

            db.collection('withdrawRequests')

              .where('userId', '==', currentUser.uid)

              .orderBy('timestamp', 'desc')

              .limit(10)

              .get()

              .then((querySnapshot) => {

                  if (querySnapshot.empty) {

                      historyContainer.innerHTML += '<p>No history yet.</p>';

                      return;

                  }

                  let tableHTML = '<table><tr><th>Date</th><th>Amount</th><th>Method</th><th>Status</th></tr>';

                  querySnapshot.forEach((doc) => {

                      const data = doc.data();

                      const date = data.timestamp ? data.timestamp.toDate().toLocaleDateString() : 'N/A';

                      const statusClass = `status-${data.status}`;

                      tableHTML += `<tr>

                          <td>${date}</td>

                          <td>${data.amount}</td>

                          <td>${data.paymentMethod}</td>

                          <td class="${statusClass}">${data.status}</td>

                      </tr>`;

                  });

                  tableHTML += '</table>';

                  historyContainer.innerHTML += tableHTML;

              })

              .catch(error => {

                  console.error("Error loading withdraw history:", error);

                  historyContainer.innerHTML += '<p>Could not load history. Please create a Firestore index.</p>';

              });

        };

        

        // --- INITIALIZATION ---

        document.addEventListener('DOMContentLoaded', () => {

            generateAdGrid('watchEarnGrid', ['https://otieu.com/4/9820071', 'https://otieu.com/4/9122402', 'https://otieu.com/4/9733623', 'https://otieu.com/4/9310368', 'https://otieu.com/4/9733636', 'https://otieu.com/4/9791335', 'https://otieu.com/4/9733638', 'https://otieu.com/4/9780185', 'https://otieu.com/4/9780180', 'https://otieu.com/4/9808530', 'https://otieu.com/4/9174363', 'https://otieu.com/4/9733640', 'https://otieu.com/4/9733625', 'https://otieu.com/4/9781611', 'https://otieu.com/4/9122334', 'https://otieu.com/4/9820105', 'https://otieu.com/4/9820104', 'https://otieu.com/4/9820103', 'https://otieu.com/4/9122402', 'https://otieu.com/4/9820074'], 25, 20);

            generateAdGrid('viewWinGrid', ['https://immediatelydoghead.com/wkzks3v32v?key=122c0b6b0aa3df7bfda14d55f1bab687', 'https://immediatelydoghead.com/pifqqekyb?key=f5e39b31a36b5aa9785fece0cbec6642', 'https://immediatelydoghead.com/tcs9tdb5a?key=94060f48f66705e234eb476f915ba136', 'https://immediatelydoghead.com/s7rgwzem?key=b518cb7e5b11a209ddb453ed437c83f8', 'https://immediatelydoghead.com/d8c46h3i?key=139357be8dda30a4b54dc7fb897d0d60', 'https://immediatelydoghead.com/a6icdv8tts?key=58af49ab751a15c75a2abb7098ea1123', 'https://immediatelydoghead.com/jr1sxf6w5?key=3e1fdd28950b12fd6201c4fce0399123', 'https://immediatelydoghead.com/b1vu5wja?key=3bc5ba940214675ddfea2a3139b30dc9', 'https://immediatelydoghead.com/m11z2xczu?key=54fa96da845097d8aff5a4ca5ad00d1e', 'https://immediatelydoghead.com/a4nqsuuz?key=18912071461f47f6360e212e728f9284', 'https://immediatelydoghead.com/s95q6iwpw?key=5826af760bab63b0f24fbed9554b214f', 'https://immediatelydoghead.com/ae5vs1rs?key=6630ba7efc7f91478fbf1818116e48c5', 'https://immediatelydoghead.com/ar7cpjpq?key=f3369021d0cd76ce89a8865cf1930d80', 'https://immediatelydoghead.com/p0kv22xc?key=e31605650c5f6be7a8293d4bccc5043d', 'https://immediatelydoghead.com/grhkj4vd?key=c2f79f929ad2772127359870e7ccc077', 'https://immediatelydoghead.com/yr6zn0pnr5?key=ad077ae595f219c901b43b512121c590', 'https://immediatelydoghead.com/h4hff6d8?key=d60870da3a426dd67431f8d03e666d0e', 'https://immediatelydoghead.com/kxsq15yhc4?key=ef699c527dd1fec7432fc38a38bc95da', 'https://immediatelydoghead.com/kwxz3m3w6j?key=8b94db6163debab55f595efb7484ad66', 'https://immediatelydoghead.com/dh5862cbs?key=8e6684f134fb77a0ba560a9af29b321c'], 20, 15);

            generateDailyRewards();

            spinBtn.addEventListener('click', handleSpin);

            document.getElementById('popupOkBtn').addEventListener('click', () => modalPopup.style.display = 'none');

            document.getElementById('copyBtn').addEventListener('click', () => { navigator.clipboard.writeText(document.getElementById('referralLink').value).then(() => showPopup('Copied!', 'Referral link copied.')); });

            document.getElementById('logoutBtn').addEventListener('click', () => auth.signOut());

        });

    </script>

</body>

</html>

Post a Comment

0 Comments