# 📋 Daily Quiz & Golden Card Lottery - راهنمای پیاده‌سازی

این فیچر شامل **کوییز روزانه** و **قرعه‌کشی Golden Card** برای بازی فانتزی فوتبال است.

---

## 🗂️ ساختار فایل‌ها

### Database Schema
- `prisma/schema.prisma` - مدل‌های جدید:
  - `DailyQuiz` - کوییز روزانه
  - `QuizQuestion` - سوالات کوییز
  - `QuizSubmission` - پاسخ‌های کاربران
  - `GoldenCard` - کارت‌های طلایی
  - `Player.isGoldenCardEligible` - فیلد جدید

### API Routes
**Admin:**
- `app/api/admin/quiz/route.ts` - لیست و ایجاد کوییز
- `app/api/admin/quiz/[id]/lottery/route.ts` - اجرای قرعه‌کشی
- `app/api/admin/players/[id]/golden-toggle/route.ts` - فعال/غیرفعال کردن Golden Card

**User:**
- `app/api/quiz/route.ts` - دریافت کوییز امروز
- `app/api/quiz/submit/route.ts` - ارسال پاسخ‌ها
- `app/api/quiz/my-results/route.ts` - تاریخچه نتایج
- `app/api/golden-cards/route.ts` - لیست کارت‌های کاربر
- `app/api/golden-cards/[id]/reveal/route.ts` - باز کردن کارت

### Admin Panel
- `app/(admin)/admin/quiz/page.tsx` - لیست کوییزها
- `app/(admin)/admin/quiz/new/page.tsx` - ایجاد کوییز جدید
- `app/(admin)/admin/quiz/QuizForm.tsx` - فرم ایجاد کوییز
- `app/(admin)/admin/quiz/LotteryButton.tsx` - دکمه قرعه‌کشی
- `app/(admin)/admin/quiz/[id]/results/page.tsx` - نتایج و برندگان
- `app/(admin)/admin/players/GoldenToggle.tsx` - تاگل Golden Card

### User Pages
- `app/(user)/quiz/page.tsx` - صفحه کوییز روزانه
- `app/(user)/quiz/DailyQuizClient.tsx` - UI کوییز با countdown
- `app/(user)/quiz/history/page.tsx` - تاریخچه شرکت در کوییزها
- `app/(user)/golden-cards/page.tsx` - صفحه Golden Cards
- `app/(user)/golden-cards/GoldenCardsClient.tsx` - UI باز کردن کارت‌ها

---

## 🚀 مراحل راه‌اندازی

### 1. Database Migration
```bash
# Generate Prisma Client
npm run db:generate

# Push schema to database
npm run db:push
```

### 2. تنظیم بازیکنان Golden Card
1. به پنل ادمین برو: `/admin/players`
2. برای بازیکنان برتر، تاگل **Golden Card** رو فعال کن
3. حداقل 5-10 بازیکن رو فعال کن

### 3. ایجاد کوییز روزانه
1. برو به `/admin/quiz`
2. کلیک روی **+ کوییز جدید**
3. تاریخ، بازه زمانی (مثلاً 18:00 تا 21:00)، و تعداد برندگان رو وارد کن
4. سوالات رو اضافه کن (حداقل 5 سوال)
5. گزینه صحیح رو با دایره انتخاب کن
6. ذخیره کن

### 4. شرکت کاربران
- کاربران به `/quiz` می‌رن
- در بازه زمانی مشخص شده، به سوالات پاسخ می‌دن
- countdown timer نمایش داده می‌شه
- بعد از ارسال، نمره نمایش داده می‌شه

### 5. اجرای قرعه‌کشی
1. برو به `/admin/quiz`
2. روی دکمه **قرعه‌کشی** کلیک کن
3. سیستم:
   - همه کاربران با نمره 100% رو پیدا می‌کنه
   - به صورت تصادفی تعداد مشخص شده رو انتخاب می‌کنه
   - به هر برنده یک **Sealed Golden Card** می‌ده
4. نتایج در `/admin/quiz/[id]/results` نمایش داده می‌شه

### 6. باز کردن کارت‌ها
- کاربران به `/golden-cards` می‌رن
- روی کارت مهر شده کلیک می‌کنن
- انیمیشن unboxing نمایش داده می‌شه
- بازیکن تصادفی reveal می‌شه

---

## 🎨 UI Features

### Dark Mode + Glassmorphism
- پس‌زمینه: `bg-gray-950`
- کارت‌ها: `bg-white/5 backdrop-blur border border-white/10`
- Gradient buttons: `bg-gradient-to-r from-yellow-500 to-amber-500`
- Neon accents برای Golden Cards

### Countdown Timer
- نمایش ساعت، دقیقه، ثانیه
- استایل glassmorphism
- Auto-refresh هر ثانیه

### Unboxing Animation
- کارت مهر شده با icon 🎴
- Pulse animation
- Modal reveal با bounce effect
- Gradient border بر اساس پست بازیکن

---

## 📊 Business Logic

### امتیازدهی
- هر سوال: 1 امتیاز
- نمره نهایی: درصد (0-100)
- فقط نمره 100% واجد شرایط قرعه‌کشی

### قرعه‌کشی
- فیلتر: `score = 100`
- انتخاب تصادفی: `winnersCount` نفر
- هر برنده: 1 Golden Card (بازیکن تصادفی از لیست eligible)

### Golden Card Status
- `SEALED`: مهر شده، بازیکن مخفی
- `OPENED`: باز شده، بازیکن نمایش داده می‌شه

---

## 🔐 Security

### Authorization
- Admin routes: `requireAdmin()` middleware
- User routes: `requireAuth()` middleware
- API routes: `getServerSession()` check

### Validation
- Time window check در submit
- Duplicate submission prevention
- Correct answer محافظت شده (فقط server-side)

---

## 🧪 Testing Checklist

- [ ] ایجاد کوییز توسط ادمین
- [ ] نمایش کوییز در بازه زمانی
- [ ] countdown timer صحیح کار می‌کنه
- [ ] ارسال پاسخ‌ها
- [ ] محاسبه نمره صحیح
- [ ] جلوگیری از ارسال مجدد
- [ ] اجرای قرعه‌کشی
- [ ] دریافت Golden Card
- [ ] باز کردن کارت
- [ ] نمایش تاریخچه
- [ ] toggle Golden Card در admin

---

## 🎯 Next Steps (Optional Enhancements)

1. **Cron Job**: قرعه‌کشی خودکار هر شب
2. **Notifications**: اطلاع‌رسانی به برندگان
3. **Leaderboard**: جدول برترین شرکت‌کنندگان
4. **Streak System**: پاداش برای شرکت مداوم
5. **Lottie Animations**: انیمیشن‌های پیشرفته‌تر
6. **Sound Effects**: صدا برای unboxing
7. **Social Share**: اشتراک‌گذاری نتایج
8. **Quiz Categories**: دسته‌بندی سوالات

---

## 📞 Support

در صورت بروز مشکل:
1. لاگ‌های console رو چک کن
2. Prisma Studio رو باز کن: `npm run db:studio`
3. دیتابیس رو بررسی کن
4. API routes رو با Postman تست کن

---

**✅ فیچر آماده استفاده است!**
