// SPDX-License-Identifier: MIT
pragma solidity 0.8.24;

interface IDisputeSubjectV3 {
    function disputeSubject(uint256 subjectId) external view returns (bytes32);
    function isAuthorizedChallenger(uint256 subjectId, address account) external view returns (bool);
    function authorizedRespondent(uint256 subjectId, address challenger) external view returns (address);
    function disputePayoutSource(uint256 subjectId) external view returns (address);
    function disputePayoutCap(uint256 subjectId) external view returns (uint256);

    /// @notice Returns the immutable context for the settlement attempt that is
    ///         currently challengeable. Reverts outside that narrow state.
    function settlementChallengeContext(uint256 subjectId)
        external
        view
        returns (bytes32 snapshot, uint64 requestedAt, uint64 challengeDeadline);
}

interface IDisputePayoutSourceV3 {
    function releaseDisputePayout(uint256 disputeId, address recipient, uint256 amount) external;
}

interface IDisputeRegistryV3 {
    /// @notice Checks upheld status and exact settlement-attempt provenance.
    /// @dev The returned filing time is recorded by the subject before it enters
    ///      Challenged, making stale or replayed dispute provenance observable.
    function isFinalizedUpheldForSettlement(
        uint256 disputeId,
        address subject,
        uint256 subjectId,
        address challenger,
        bytes32 settlementSnapshot,
        uint64 settlementRequestedAt
    ) external view returns (bool upheld, uint64 filedAt);
}
