package model

import (
	"strings"
	"testing"
)

func TestTransferNormalizePreservesBase58ExternalAddress(t *testing.T) {
	address := "TGBDXEg9rxSqGFJDcb889zqTjDwx1bmLRF"
	transfer := &Transfer{
		IdempotencyKey:  "idemp",
		TransferRef:     "ref",
		OrganizationRef: "org",
		SourceWalletRef: "wallet",
		Network:         "tron_mainnet",
		TokenSymbol:     "USDT",
		Destination: TransferDestination{
			ExternalAddress:         address,
			ExternalAddressOriginal: address,
		},
	}

	transfer.Normalize()

	if transfer.Destination.ExternalAddress != address {
		t.Fatalf("expected external address to preserve case, got %q", transfer.Destination.ExternalAddress)
	}
	if transfer.Destination.ExternalAddressOriginal != address {
		t.Fatalf("expected external address original to preserve case, got %q", transfer.Destination.ExternalAddressOriginal)
	}
}

func TestTransferNormalizeLowercasesHexExternalAddress(t *testing.T) {
	address := "0xAABBCCDDEEFF00112233445566778899AABBCCDD"
	transfer := &Transfer{
		Destination: TransferDestination{
			ExternalAddress:         address,
			ExternalAddressOriginal: address,
		},
	}

	transfer.Normalize()

	if transfer.Destination.ExternalAddress != strings.ToLower(address) {
		t.Fatalf("expected hex external address to be lowercased, got %q", transfer.Destination.ExternalAddress)
	}
	if transfer.Destination.ExternalAddressOriginal != address {
		t.Fatalf("expected external address original to preserve case, got %q", transfer.Destination.ExternalAddressOriginal)
	}
}
