package usecase

import (
	"testing"

	"github.com/stretchr/testify/assert"
)

func TestGenerateVerifyCode(t *testing.T) {
	tests := []struct {
		name        string
		digits      int
		expectErr   bool
		expectedLen int
	}{
		{
			name:        "Generate 6-digit code (default)",
			digits:      0, // 測試預設值
			expectErr:   false,
			expectedLen: 6,
		},
		{
			name:        "Generate 4-digit code",
			digits:      4,
			expectErr:   false,
			expectedLen: 4,
		},
		{
			name:        "Generate 8-digit code",
			digits:      8,
			expectErr:   false,
			expectedLen: 8,
		},
		{
			name:        "Invalid digits (negative value)",
			digits:      -3, // 測試無效位數
			expectErr:   false,
			expectedLen: 6, // 預設值為6位數
		},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			code, err := generateVerifyCode(tt.digits)

			// 驗證錯誤是否符合預期
			if tt.expectErr {
				assert.Error(t, err)
			} else {
				assert.NoError(t, err)
				assert.NotEmpty(t, code)

				// 驗證生成的代碼長度是否符合預期
				assert.Equal(t, tt.expectedLen, len(code))

				// 驗證代碼是否為純數字
				for _, c := range code {
					assert.True(t, c >= '0' && c <= '9', "Verify code should only contain digits")
				}
			}
		})
	}
}
