# 📋 Daily Quiz & Golden Card Lottery

## 🎯 Overview

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

### چرا این فیچر؟
- 🎮 **Engagement**: کاربران قبل از شروع تورنمنت فعال می‌مونن
- 🏆 **Gamification**: سیستم پاداش و قرعه‌کشی
- 💎 **Exclusive Rewards**: کارت‌های طلایی بازیکنان برتر
- 📊 **Data Collection**: اطلاعات از علاقه‌مندی کاربران

---

## ⚡ Quick Start

### Windows:
```bash
RUN_QUIZ_FEATURE.bat
```

### Linux/Mac:
```bash
chmod +x RUN_QUIZ_FEATURE.sh
./RUN_QUIZ_FEATURE.sh
```

### Manual:
```bash
npm run db:generate
npm run db:push
npm run seed:quiz
npm run dev
```

---

## 📸 Screenshots

### User Flow:
1. **Daily Quiz** (`/quiz`) - کوییز با countdown timer
2. **Quiz History** (`/quiz/history`) - تاریخچه شرکت
3. **Golden Cards** (`/golden-cards`) - کارت‌های دریافتی
4. **Unboxing** - انیمیشن باز کردن کارت

### Admin Flow:
1. **Quiz List** (`/admin/quiz`) - لیست کوییزها
2. **Create Quiz** (`/admin/quiz/new`) - ایجاد کوییز
3. **Results** (`/admin/quiz/[id]/results`) - نتایج و برندگان
4. **Players** (`/admin/players`) - تنظیم Golden Card

---

## 🎨 Features

### ✅ User Features
- کوییز روزانه با بازه زمانی
- Countdown timer real-time
- سوالات چند گزینه‌ای
- نمایش نتیجه فوری
- تاریخچه شرکت
- کارت‌های طلایی
- Unboxing animation

### ✅ Admin Features
- ایجاد کوییز روزانه
- افزودن سوالات نامحدود
- تنظیم بازه زمانی
- اجرای قرعه‌کشی
- مشاهده برندگان
- تنظیم Golden Card eligible

### ✅ UI/UX
- Dark mode
- Glassmorphism effects
- Gradient buttons
- Neon glow
- Smooth animations
- Responsive design

---

## 📚 Documentation

| File | Description |
|------|-------------|
| `QUIZ_QUICKSTART.md` | راهنمای شروع سریع |
| `QUIZ_FEATURE_GUIDE.md` | مستندات کامل فیچر |
| `IMPLEMENTATION_SUMMARY.md` | جزئیات فنی پیاده‌سازی |
| `FEATURES.md` | لیست کامل فیچرها |

---

## 🗂️ File Structure

```
📁 Database
  └── prisma/schema.prisma (4 new models)

📁 API Routes (8 endpoints)
  ├── /api/quiz
  ├── /api/quiz/submit
  ├── /api/quiz/my-results
  ├── /api/golden-cards
  ├── /api/golden-cards/[id]/reveal
  ├── /api/admin/quiz
  ├── /api/admin/quiz/[id]/lottery
  └── /api/admin/players/[id]/golden-toggle

📁 Admin Panel (7 components)
  ├── /admin/quiz
  ├── /admin/quiz/new
  ├── /admin/quiz/[id]/results
  └── Components: QuizForm, LotteryButton, GoldenToggle

📁 User Pages (5 components)
  ├── /quiz
  ├── /quiz/history
  ├── /golden-cards
  └── Components: DailyQuizClient, GoldenCardsClient

📁 Scripts
  └── scripts/seed-quiz-sample.ts
```

---

## 🔧 Tech Stack

- **Framework**: Next.js 16 (App Router)
- **Database**: PostgreSQL + Prisma
- **Auth**: NextAuth v4
- **Styling**: Tailwind CSS v4
- **Language**: TypeScript

---

## 🎯 How It Works

### 1️⃣ Admin Creates Quiz
```
Admin → /admin/quiz/new
  ├── Set date & time window
  ├── Add questions (unlimited)
  ├── Mark correct answers
  └── Set winners count
```

### 2️⃣ Users Participate
```
User → /quiz
  ├── See countdown timer
  ├── Answer questions
  ├── Submit answers
  └── Get score (0-100%)
```

### 3️⃣ Lottery Execution
```
Admin → /admin/quiz → Run Lottery
  ├── Filter 100% scores
  ├── Random selection
  ├── Assign sealed cards
  └── View winners
```

### 4️⃣ Card Reveal
```
User → /golden-cards
  ├── See sealed cards
  ├── Click to open
  ├── Animation plays
  └── Player revealed
```

---

## 🔒 Security

- ✅ Admin-only routes
- ✅ User authentication
- ✅ Time window validation
- ✅ Duplicate prevention
- ✅ Server-side scoring
- ✅ Ownership validation

---

## 📊 Database Models

### DailyQuiz
```prisma
- id, date, windowStart, windowEnd
- winnersCount, isProcessed
- questions[], submissions[]
```

### QuizQuestion
```prisma
- id, quizId, questionText
- options[], correctAnswer, order
```

### QuizSubmission
```prisma
- id, userId, quizId
- answers[], score, submittedAt
- Unique: [userId, quizId]
```

### GoldenCard
```prisma
- id, userId, playerId
- status (SEALED/OPENED)
- acquiredDate, openedAt
```

---

## 🧪 Testing

### Test Scenario:
1. ✅ Create quiz as admin
2. ✅ Submit 100% as user
3. ✅ Run lottery as admin
4. ✅ Receive sealed card
5. ✅ Open card as user
6. ✅ View revealed player

### Edge Cases:
- ✅ Outside time window
- ✅ Duplicate submission
- ✅ No eligible players
- ✅ No perfect scores
- ✅ Already opened card

---

## 🚀 Deployment

### Environment Variables
```env
DATABASE_URL="postgresql://..."
NEXTAUTH_SECRET="..."
NEXTAUTH_URL="http://localhost:3000"
```

### Build
```bash
npm run build
npm start
```

### Vercel
```bash
vercel deploy
```

---

## 📈 Future Enhancements

- [ ] Cron job for auto-lottery
- [ ] Email notifications
- [ ] Push notifications
- [ ] Quiz categories
- [ ] Difficulty levels
- [ ] Streak rewards
- [ ] Social sharing
- [ ] Lottie animations
- [ ] Sound effects
- [ ] Analytics dashboard

---

## 🐛 Troubleshooting

### Quiz not showing?
- Check time window
- Verify date is today
- Check database connection

### Lottery not working?
- Ensure eligible players exist
- Check for 100% submissions
- Verify admin permissions

### Card not opening?
- Check user authentication
- Verify card status is SEALED
- Check player data exists

---

## 📞 Support

For issues or questions:
1. Check documentation files
2. Review `IMPLEMENTATION_SUMMARY.md`
3. Open Prisma Studio: `npm run db:studio`
4. Check browser console
5. Review API logs

---

## ✨ Credits

**Implemented by**: Kiro AI Assistant
**Date**: 2026
**Version**: 1.0.0
**Status**: ✅ Production Ready

---

## 📝 License

Part of Fantasy Football Web Application

---

**🎉 Enjoy the feature!**

For detailed documentation, see `QUIZ_FEATURE_GUIDE.md`
