function claimFaucetTokens() public {
    
    
    if (balanceOf(address(this)) <= faucetDrip) {
        revert RaiseBoxFaucet_InsufficientContractBalance();
    }
@>  if (dailyClaimCount >= dailyClaimLimit) {
@>      revert RaiseBoxFaucet_DailyClaimLimitReached();  
@>  }
    
    
     * @param lastFaucetDripDay tracks the last day a claim was made
     * @notice resets the @param dailyClaimCount every 24 hours
     */
@>  if (block.timestamp > lastFaucetDripDay + 1 days) {
@>      lastFaucetDripDay = block.timestamp;
@>      dailyClaimCount = 0;  
@>  }
    lastClaimTime[faucetClaimer] = block.timestamp;
@>  dailyClaimCount++;  
    
    _transfer(address(this), faucetClaimer, faucetDrip);
    emit Claimed(msg.sender, faucetDrip);
}
pragma solidity ^0.8.30;
import {Test, console} from "forge-std/Test.sol";
import {RaiseBoxFaucet} from "../src/RaiseBoxFaucet.sol";
contract FaucetFreezeTest is Test {
    RaiseBoxFaucet public faucet;
    address public owner = makeAddr("owner");
    
    function setUp() public {
        vm.startPrank(owner);
        
        faucet = new RaiseBoxFaucet(
            "TestToken",
            "TEST",
            1000 * 10**18,      
            0.005 ether,        
            0.1 ether           
        );
        
        
        vm.deal(address(faucet), 10 ether);
        
        vm.stopPrank();
    }
    
    function testFaucetPermanentFreeze() public {
        
        for (uint256 i = 1; i <= 100; i++) {
            address user = makeAddr(string(abi.encodePacked("user", i)));
            
            vm.prank(user);
            faucet.claimFaucetTokens();
            
            
            vm.warp(block.timestamp + 3 days + 1);
        }
        
        console.log("Daily claim count after 100 claims:", faucet.dailyClaimCount());
        assertEq(faucet.dailyClaimCount(), 100);
        
        
        address user101 = makeAddr("user101");
        vm.prank(user101);
        vm.expectRevert(RaiseBoxFaucet.RaiseBoxFaucet_DailyClaimLimitReached.selector);
        faucet.claimFaucetTokens();
        
        
        vm.warp(block.timestamp + 2 days);
        
        
        address newDayUser = makeAddr("newDayUser");
        vm.prank(newDayUser);
        vm.expectRevert(RaiseBoxFaucet.RaiseBoxFaucet_DailyClaimLimitReached.selector);
        faucet.claimFaucetTokens(); 
        
        console.log("Daily claim count after 24+ hours:", faucet.dailyClaimCount());
        assertEq(faucet.dailyClaimCount(), 100); 
        
        
        vm.warp(block.timestamp + 10 days);
        
        address futureUser = makeAddr("futureUser");
        vm.prank(futureUser);
        vm.expectRevert(RaiseBoxFaucet.RaiseBoxFaucet_DailyClaimLimitReached.selector);
        faucet.claimFaucetTokens(); 
        
        console.log("CONTRACT IS PERMANENTLY FROZEN");
    }
}
 function claimFaucetTokens() public {
     faucetClaimer = msg.sender;
+    // Reset day at function start so the limit check reflects the new day
+    if (block.timestamp > lastFaucetDripDay + 1 days) {
+        lastFaucetDripDay = block.timestamp;
+        dailyClaimCount = 0;
+    }
-    if (dailyClaimCount >= dailyClaimLimit) {
+    if (dailyClaimCount >= dailyClaimLimit) {
         revert RaiseBoxFaucet_DailyClaimLimitReached();
     }
     // ... ETH drip branch ...
-    if (block.timestamp > lastFaucetDripDay + 1 days) {
-        lastFaucetDripDay = block.timestamp;
-        dailyClaimCount = 0;
-    }
     lastClaimTime[faucetClaimer] = block.timestamp;
     dailyClaimCount++;
     _transfer(address(this), faucetClaimer, faucetDrip);
 }