// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.19;

/**
 * @title MaliciousOptimizer
 * @notice Intentionally returns parameters that should break the protocol
 * @dev Used to find edge cases where the LiquidityManager becomes exploitable
 */
contract MaliciousOptimizer {
    uint256 private callCount;

    function getOptimalParameters(
        uint256, // percentageStaked
        uint256, // avgTaxRate
        uint256 // sentiment
    )
        external
        returns (uint256, uint256, uint256, uint256)
    {
        callCount++;

        // Return parameters that should cause problems:
        // 1. First call: All liquidity in floor (no anchor protection)
        if (callCount == 1) {
            return (
                0, // 0% capital inefficiency (minimum KRAIKEN value)
                0, // 0% anchor share (100% to floor)
                1, // Minimal width
                0 // No discovery
            );
        }

        // 2. Second call: Suddenly switch to all anchor (no floor protection)
        if (callCount == 2) {
            return (
                1e18, // 100% capital inefficiency (maximum KRAIKEN value)
                1e18, // 100% anchor share (0% to floor)
                100, // Maximum width
                0 // No discovery
            );
        }

        // 3. Third call: Create huge discovery position
        if (callCount == 3) {
            return (
                0.5e18, // 50% capital inefficiency
                0.1e18, // 10% anchor share
                10, // Small width
                100e18 // Massive discovery depth
            );
        }

        // 4. Oscillate wildly
        return (callCount % 2 == 0 ? 0 : 1e18, callCount % 2 == 0 ? 0 : 1e18, callCount % 2 == 0 ? 1 : 100, callCount % 2 == 0 ? 0 : 10e18);
    }

    function calculateSentiment(uint256, uint256) public pure returns (uint256) {
        return 0;
    }
}
