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

/// @title ConfigurableOptimizer
/// @notice Optimizer mock with directly settable parameters for parameter sweep fuzzing
/// @dev Parameters are set via constructor or setter, not environment variables (Solidity can't read env)
contract ConfigurableOptimizer {
    uint256 private _capitalInefficiency;
    uint256 private _anchorShare;
    uint24 private _anchorWidth;
    uint256 private _discoveryDepth;

    constructor(uint256 capitalInefficiency_, uint256 anchorShare_, uint24 anchorWidth_, uint256 discoveryDepth_) {
        _capitalInefficiency = capitalInefficiency_;
        _anchorShare = anchorShare_;
        _anchorWidth = anchorWidth_;
        _discoveryDepth = discoveryDepth_;
    }

    function setParams(uint256 capitalInefficiency_, uint256 anchorShare_, uint24 anchorWidth_, uint256 discoveryDepth_) external {
        _capitalInefficiency = capitalInefficiency_;
        _anchorShare = anchorShare_;
        _anchorWidth = anchorWidth_;
        _discoveryDepth = discoveryDepth_;
    }

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

    function getSentiment() external pure returns (uint256) {
        return 0;
    }

    function getLiquidityParams() external view returns (uint256 capitalInefficiency, uint256 anchorShare, uint24 anchorWidth, uint256 discoveryDepth) {
        capitalInefficiency = _capitalInefficiency;
        anchorShare = _anchorShare;
        anchorWidth = _anchorWidth;
        discoveryDepth = _discoveryDepth;
    }

    function getDescription() external pure returns (string memory) {
        return "Configurable Optimizer (Parameter Sweep)";
    }
}
