"""Validate and decode addresses across multiple formats.

Verifies checksums for Base58Check, Bech32/Bech32m, and EIP-55 addresses, and
shows that tampered addresses are rejected. No network access is used.
"""
from libcrypto import get_address_info, to_checksum_address, validate_address


def main() -> None:
    valid_addresses = {
        "1BgGZ9tcN4rm9KBzDn7KprQz87SZ26SAMH": "bitcoin",
        "3JvL6Ymt8MVWiCNHC7oWU6nLeHNJKLZGLN": "bitcoin",
        "bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4": "bitcoin",
        "bc1pmfr3p9j00pfxjh0zmgp99y8zftmd3s5pmedqhyptwy6lm87hf5sspknck9": "bitcoin",
        "0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf": "ethereum",
        "TMVQGm1qAQYVdetCeGRRkTWYYrLXuHK2HC": "tron",
    }

    for address, network in valid_addresses.items():
        assert validate_address(address, network), f"{address} should be valid"
        info = get_address_info(address)
        print(f"{info.address_format:12} {info.address_type:8} {info.networks} :: {address}")

    # Tampered addresses (bad checksum) must be rejected.
    assert validate_address("1BgGZ9tcN4rm9KBzDn7KprQz87SZ26SAMX") is False
    assert validate_address("bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t5") is False
    assert validate_address("0x7E5f4552091a69125d5dfcb7b8c2659029395bdf") is False

    # Normalize a lowercase Ethereum address to its EIP-55 checksummed form.
    checksummed = to_checksum_address("0x7e5f4552091a69125d5dfcb7b8c2659029395bdf")
    print("\nEIP-55 checksum:", checksummed)

    print("\nAll address validation checks passed.")


if __name__ == "__main__":
    main()
