// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

import {IERC20} from "@openzeppelin-contracts/token/ERC20/IERC20.sol";

interface ISTNK is IERC20 {
    error NotStakingContract();
    error NotTreasury();
    error InsufficientBalance();
    error DebtExists();
    error NotInitializer();

    event LogSupply(uint256 indexed epoch, uint256 totalSupply);
    event LogRebase(uint256 indexed epoch, uint256 rebase, uint256 index);
    event LogStakingContractUpdated(address stakingContract);

    function rebase(uint256 profit_, uint256 epoch_) external returns (uint256);
    function increaseAllowance(address spender, uint256 imbalance) external returns (bool);
    function decreaseAllowance(address spender, uint256 imbalance) external returns (bool);
    function circulatingSupply() external view returns (uint256);
    function treasury() external view returns (address);
    function sharesForBalance(uint256 amount) external view returns (uint256);
    function balanceForShares(uint256 shares) external view returns (uint256);
    function index() external view returns (uint256);
    function toGhst(uint256 amount) external view returns (uint256);
    function fromGhst(uint256 amount) external view returns (uint256);
    function debtBalances(address _address) external view returns (uint256);
    function changeDebt(
        uint256 amount,
        address debtor,
        bool add
    ) external;
}
