package store

import (
	"context"
	"regexp"
	"testing"
)

// 兑换码：固定形态 SDX-XXXX-XXXX-XXXX，字母表剔除易混字符（0/O、1/I/L）。
func TestNewRedeemCodeFormat(t *testing.T) {
	re := regexp.MustCompile(`^SDX(-[ABCDEFGHJKMNPQRSTUVWXYZ23456789]{4}){3}$`)
	seen := map[string]bool{}
	for i := 0; i < 200; i++ {
		code, err := newRedeemCode()
		if err != nil {
			t.Fatalf("生成失败: %v", err)
		}
		if !re.MatchString(code) {
			t.Fatalf("形态不符: %q", code)
		}
		if seen[code] {
			t.Fatalf("200 个样本内撞码: %q（crypto/rand 出问题了）", code)
		}
		seen[code] = true
	}
}

// 参数校验在 nil-db 之前生效——admin 手滑发 0 面额/超量不该打到数据库才被拒。
func TestGenerateRedeemCodesBounds(t *testing.T) {
	p := &Postgres{} // db==nil
	for _, tc := range []struct {
		n      int
		credit int64
	}{{0, 1e6}, {201, 1e6}, {1, 0}, {1, -5}} {
		if _, err := p.GenerateRedeemCodes(context.Background(), tc.n, tc.credit, ""); err == nil {
			t.Errorf("n=%d credit=%d 应被拒", tc.n, tc.credit)
		}
	}
}
