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

/**
 * @title CheckpointHubConfig
 * @notice Granular hub configuration — used at init, applyConfig, and off-chain deploy manifests.
 */
library CheckpointHubConfig {
    struct HubConfig {
        uint64 chainId;
        uint16 batchSize;
        uint32 maxBatchWaitSeconds;
        uint256 minPaymentValueWei;
        bool requireValidatorSigs;
        bool allowCalldataOnlySubmit;
        bool allowCCIPIngress;
        bool enforcePreviousBatchId;
        address ccipRouter;
        uint64 sourceChainSelector;
        address batchEmitterOnSource;
        address legacyMirrorV1;
        address legacyTetherV1;
        address submitterAttestationSigner;
    }

    function mainnetDefaults() internal pure returns (HubConfig memory c) {
        c.chainId = 138;
        c.batchSize = 10;
        c.maxBatchWaitSeconds = 300;
        c.requireValidatorSigs = true;
        c.allowCalldataOnlySubmit = true;
        c.allowCCIPIngress = true;
        c.enforcePreviousBatchId = true;
    }

    function validate(HubConfig memory c) internal pure {
        require(c.chainId == 138, "chainId");
        require(c.batchSize > 0 && c.batchSize <= 256, "batchSize");
        require(c.maxBatchWaitSeconds > 0, "maxWait");
    }
}
