"""
Synor IBC SDK for Python

Inter-Blockchain Communication (IBC) protocol SDK for cross-chain interoperability.

Features:
- Light client verification
- Connection & channel management
- Packet relay
- Token transfers (ICS-20)
- Atomic swaps (HTLC)

Example:
    >>> from synor_ibc import SynorIbc, IbcConfig
    >>>
    >>> ibc = SynorIbc(IbcConfig(api_key="your-api-key"))
    >>>
    >>> # Transfer tokens to another chain
    >>> result = await ibc.transfer.transfer(
    ...     source_port="transfer",
    ...     source_channel="channel-0",
    ...     token={"denom": "usynor", "amount": "1000000"},
    ...     sender="synor1...",
    ...     receiver="cosmos1...",
    ... )
    >>>
    >>> # Initiate atomic swap
    >>> swap = await ibc.swaps.initiate(
    ...     responder="cosmos1...",
    ...     initiator_asset={"native": {"amount": 1000000}},
    ...     responder_asset={"ics20": {"denom": "uatom", "amount": 500000}},
    ... )
"""

from .types import (
    # Core types
    Height,
    Timestamp,
    ChainId,
    Signer,
    Version,
    CommitmentPrefix,
    # Client types
    ClientId,
    ClientType,
    ClientState,
    ConsensusState,
    TrustLevel,
    Header,
    ValidatorSet,
    Validator,
    # Connection types
    ConnectionId,
    ConnectionState,
    ConnectionEnd,
    ConnectionCounterparty,
    # Channel types
    PortId,
    ChannelId,
    ChannelOrder,
    ChannelState,
    Channel,
    ChannelCounterparty,
    # Packet types
    Packet,
    PacketCommitment,
    Acknowledgement,
    Timeout,
    FungibleTokenPacketData,
    # Swap types
    SwapId,
    SwapState,
    SwapAsset,
    Hashlock,
    Timelock,
    Htlc,
    AtomicSwap,
    SwapAction,
    SwapPacketData,
    # Proof types
    MerkleProof,
    CommitmentProof,
    # Events
    IbcEvent,
    # Config & errors
    IbcConfig,
    IbcException,
)

from .client import (
    SynorIbc,
    LightClientClient,
    ConnectionsClient,
    ChannelsClient,
    PacketsClient,
    TransferClient,
    SwapsClient,
)

__all__ = [
    # Main client
    "SynorIbc",
    # Sub-clients
    "LightClientClient",
    "ConnectionsClient",
    "ChannelsClient",
    "PacketsClient",
    "TransferClient",
    "SwapsClient",
    # Core types
    "Height",
    "Timestamp",
    "ChainId",
    "Signer",
    "Version",
    "CommitmentPrefix",
    # Client types
    "ClientId",
    "ClientType",
    "ClientState",
    "ConsensusState",
    "TrustLevel",
    "Header",
    "ValidatorSet",
    "Validator",
    # Connection types
    "ConnectionId",
    "ConnectionState",
    "ConnectionEnd",
    "ConnectionCounterparty",
    # Channel types
    "PortId",
    "ChannelId",
    "ChannelOrder",
    "ChannelState",
    "Channel",
    "ChannelCounterparty",
    # Packet types
    "Packet",
    "PacketCommitment",
    "Acknowledgement",
    "Timeout",
    "FungibleTokenPacketData",
    # Swap types
    "SwapId",
    "SwapState",
    "SwapAsset",
    "Hashlock",
    "Timelock",
    "Htlc",
    "AtomicSwap",
    "SwapAction",
    "SwapPacketData",
    # Proof types
    "MerkleProof",
    "CommitmentProof",
    # Events
    "IbcEvent",
    # Config & errors
    "IbcConfig",
    "IbcException",
]

__version__ = "0.1.0"
