package admin

import (
	"errors"
	"testing"

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

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

	request := domain.WalletBalanceAdjustmentRequest{
		RequesterAdminUserID: "maker",
		Status:               "pending",
	}
	if _, err := validateWalletAdjustmentDecision(request, "maker", "approve", ""); !errors.Is(err, domain.ErrForbidden) {
		t.Fatalf("expected maker approval to be forbidden, got %v", err)
	}
	if _, err := validateWalletAdjustmentDecision(request, "checker", "approve", "Approved"); err != nil {
		t.Fatalf("checker approval rejected: %v", err)
	}
	if _, err := validateWalletAdjustmentDecision(request, "checker", "reject", "short"); !errors.Is(err, domain.ErrValidation) {
		t.Fatalf("expected short rejection note to fail, got %v", err)
	}
	if _, err := validateWalletAdjustmentDecision(request, "maker", "cancel", "Customer request withdrawn"); err != nil {
		t.Fatalf("maker cancellation rejected: %v", err)
	}
}

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

	limit, ok := walletAdjustmentLimitForRole("admin")
	if !ok || limit != adminWalletAdjustmentLimitCents {
		t.Fatalf("unexpected admin limit: %d, %v", limit, ok)
	}
	if _, ok := walletAdjustmentLimitForRole("customer"); ok {
		t.Fatal("customer must not have an adjustment limit")
	}
}
