package beneficiaries

import (
	"testing"

	"github.com/niels/banking-app/backend/internal/domain"
)

func TestNormalizeAndValidate(t *testing.T) {
	t.Parallel()

	details, err := NormalizeAndValidate("  Demo BV ", "NL88 SWFN 1234 5678 90", "swfnnl2a", "eur", []domain.RoutingCode{
		{CodeType: "bank_code", Country: "nl", Network: "sepa", Code: "swfn"},
	})
	if err != nil {
		t.Fatalf("valid beneficiary rejected: %v", err)
	}
	if details.Name != "Demo BV" || details.IBAN != "NL88SWFN1234567890" || details.BIC != "SWFNNL2A" || details.Currency != "EUR" {
		t.Fatalf("unexpected normalized details: %+v", details)
	}
	if len(details.RoutingCodes) != 1 || details.RoutingCodes[0].Code != "SWFN" {
		t.Fatalf("unexpected routing codes: %+v", details.RoutingCodes)
	}

	if _, err := NormalizeAndValidate("", "NL88SWFN1234567890", "", "EUR", nil); err == nil {
		t.Fatal("expected empty name to fail")
	}
	if _, err := NormalizeAndValidate("Demo", "NL00SWFN1234567890", "", "EUR", nil); err == nil {
		t.Fatal("expected invalid IBAN to fail")
	}
	if _, err := NormalizeAndValidate("Demo", "NL88SWFN1234567890", "", "EUR", []domain.RoutingCode{
		{CodeType: "aba_routing_number", Country: "US", Network: "ach", Code: "011000016"},
	}); err == nil {
		t.Fatal("expected invalid routing code to fail")
	}
}
