# Installation Guide - Elite Gaming Tournament

## সিস্টেম প্রয়োজনীয়তা

```
✓ PHP 8.2 বা তার উপরে
✓ MySQL 8.0 বা তার উপরে (অথবা MariaDB 10.3+)
✓ Apache 2.4+ (htaccess সাপোর্ট)
✓ কমপক্ষে 512MB RAM
✓ কমপক্ষে 100MB ডিস্ক স্পেস
```

---

## ধাপে ধাপে ইনস্টলেশন

### ধাপ 1: ওয়েব সার্ভার সেটআপ

#### Windows এ XAMPP দিয়ে

```bash
1. XAMPP ডাউনলোড করুন (xampp.org থেকে)
2. ইনস্টল করুন
3. Apache এবং MySQL স্টার্ট করুন
4. প্রকল্প কপি করুন C:\xampp\htdocs\gaming_tournament\
```

#### macOS এ Homebrew দিয়ে

```bash
# PHP ইনস্টল করুন
brew install php@8.2
brew install mysql@8.0

# সার্ভিস স্টার্ট করুন
brew services start mysql@8.0

# প্রকল্প কপি করুন
cp -r gaming_tournament /Library/WebServer/Documents/
```

#### Linux (Ubuntu/Debian) এ

```bash
# আপডেট করুন
sudo apt update && sudo apt upgrade

# PHP ইনস্টল করুন
sudo apt install php8.2 php8.2-mysql php8.2-gd php8.2-curl

# MySQL ইনস্টল করুন
sudo apt install mysql-server

# Apache ইনস্টল করুন
sudo apt install apache2

# মডিউল সক্ষম করুন
sudo a2enmod rewrite
sudo systemctl restart apache2

# প্রকল্প কপি করুন
sudo cp -r gaming_tournament /var/www/html/
sudo chown -R www-data:www-data /var/www/html/gaming_tournament
```

### ধাপ 2: ডাটাবেস সেটআপ

#### Option 1: MySQL Command Line দিয়ে

```bash
# MySQL-এ প্রবেশ করুন
mysql -u root -p

# প্রশ্নে পাসওয়ার্ড চাইলে চাপুন অথবা খালি রাখুন

# কমান্ড চালান:
CREATE DATABASE gaming_tournament CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE gaming_tournament;
SOURCE /path/to/database/schema.sql;

# যাচাই করুন
SHOW TABLES;
```

#### Option 2: phpMyAdmin দিয়ে (সহজ)

```bash
1. phpMyAdmin খুলুন (http://localhost/phpmyadmin)
2. "নতুন" বোতাম ক্লিক করুন
3. ডাটাবেস নাম: gaming_tournament
4. সার্মিষ্ট: utf8mb4_unicode_ci
5. "তৈরি করুন" ক্লিক করুন
6. "ইমপোর্ট" ট্যাব ক্লিক করুন
7. database/schema.sql ফাইল নির্বাচন করুন
8. "চালান" বোতাম ক্লিক করুন
```

### ধাপ 3: প্রকল্প কনফিগারেশন

```bash
# প্রকল্প ডিরেক্টরিতে যান
cd gaming_tournament

# .env ফাইল পরিবর্তন করুন
nano .env  (অথবা আপনার এডিটর খুলুন)

# সেটিংস সম্পাদনা করুন:
DB_HOST=localhost      (সাধারণত localhost থাকে)
DB_USERNAME=root       (Windows/macOS এ root থাকে)
DB_PASSWORD=           (খালি রাখুন যদি পাসওয়ার্ড নেই)
DB_NAME=gaming_tournament

# ফাইল সংরক্ষণ করুন
```

### ধাপ 4: পারমিশন সেটিংস

```bash
# Linux এ পারমিশন সেট করুন
sudo chmod -R 755 public/
sudo chmod -R 755 storage/
sudo chmod -R 755 app/

# আপলোড ফোল্ডার তৈরি করুন
mkdir -p public/uploads/{profiles,matches,screenshots,payments}
chmod -R 775 public/uploads/

# লগ ফোল্ডার তৈরি করুন
mkdir -p storage/logs
chmod -R 775 storage/logs
```

### ধাপ 5: Apache Configuration

```bash
# .htaccess ফাইল যাচাই করুন (public/ ফোল্ডারে থাকা উচিত)
# যদি না থাকে তাহলে তৈরি করুন:

cat > public/.htaccess << 'EOF'
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /gaming_tournament/public/
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?request=$1 [L]
</IfModule>
EOF
```

### ধাপ 6: ডিরেক্টরি কাঠামো তৈরি করুন

```bash
# সব প্রয়োজনীয় ডিরেক্টরি তৈরি করুন
mkdir -p app/Controllers
mkdir -p app/Models
mkdir -p app/Views/admin
mkdir -p app/Components
mkdir -p app/Services
mkdir -p app/Helpers
mkdir -p public/assets/{css,js,images}
mkdir -p public/uploads/{profiles,matches,screenshots,payments}
mkdir -p storage/logs
mkdir -p database
mkdir -p config
```

---

## প্রথম চেষ্টা

### লোকাল সার্ভারে চালান

```bash
# Option 1: PHP Built-in Server (দ্রুত পরীক্ষার জন্য)
php -S localhost:8000 -t public/

# ব্রাউজারে খুলুন: http://localhost:8000

# Option 2: Apache দিয়ে
# ব্রাউজারে খুলুন: http://localhost/gaming_tournament/public/
```

### প্রথম অ্যাকাউন্ট তৈরি করুন

```
1. /register পৃষ্ঠায় যান
2. তথ্য পূরণ করুন:
   - সম্পূর্ণ নাম: আপনার নাম
   - ইউজারনেম: your_username
   - ফোন: 01700000000
   - পাসওয়ার্ড: strong_password
3. রেজিস্টার করুন
4. লগইন করুন
```

### Admin অ্যাকাউন্ট তৈরি করুন (বিকল্প)

```bash
# MySQL-এ প্রবেশ করুন
mysql -u root -p gaming_tournament

# Admin ইউজার তৈরি করুন:
INSERT INTO users (full_name, username, phone, password_hash, status, created_at, updated_at) 
VALUES (
    'Admin User',
    'admin',
    '01700000000',
    '$argon2id$v=19$m=65536,t=4,p=2$...',  -- আপনার হ্যাশ করা পাসওয়ার্ড
    'active',
    NOW(),
    NOW()
);

# Admin ওয়ালেট তৈরি করুন:
INSERT INTO wallets (user_id, deposit_balance, winning_balance) 
VALUES (1, 0, 0);  -- 1 হল ইউজার আইডি

# Admin রোল যোগ করুন:
INSERT INTO admin_users (user_id, role, status) 
VALUES (1, 'super_admin', 'active');
```

---

## সাধারণ সমস্যা এবং সমাধান

### সমস্যা 1: "Connection Refused" ত্রুটি

```
কারণ: MySQL চলছে না
সমাধান:
  Windows: XAMPP Control Panel থেকে MySQL স্টার্ট করুন
  macOS: brew services start mysql@8.0
  Linux: sudo systemctl start mysql
```

### সমস্যা 2: "Table 'gaming_tournament.users' doesn't exist"

```
কারণ: Schema ইমপোর্ট হয়নি
সমাধান:
  1. mysql -u root -p gaming_tournament < database/schema.sql
  2. অথবা phpMyAdmin দিয়ে ইমপোর্ট করুন
```

### সমস্যা 3: "White Screen of Death"

```
সমাধান:
  1. error_reporting(E_ALL) কনফিগ.php তে চেক করুন
  2. PHP লগ চেক করুন (storage/logs/)
  3. ব্রাউজার কনসোল দেখুন (F12)
```

### সমস্যা 4: "Permission Denied" ত্রুটি

```
সমাধান:
  chmod -R 755 app/
  chmod -R 755 public/
  chmod -R 775 storage/
  chmod -R 775 public/uploads/
```

### সমস্যা 5: ".htaccess" কাজ করছে না

```
সমাধান:
  1. Apache mod_rewrite সক্ষম করুন:
     sudo a2enmod rewrite
     sudo systemctl restart apache2
  
  2. .htaccess এর অনুমতি চেক করুন:
     chmod 644 public/.htaccess
```

---

## উন্নত কনফিগারেশন

### SSL/HTTPS সেটআপ

```bash
# Let's Encrypt দিয়ে (ফ্রি)
sudo apt install certbot python3-certbot-apache
sudo certbot --apache -d yourdomain.com

# nginx-এ SSL যোগ করুন
server {
    listen 443 ssl http2;
    server_name yourdomain.com;
    
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;
    
    root /var/www/html/gaming_tournament/public;
    index index.php;
}
```

### Production Deployment

```bash
# 1. Environment পরিবর্তন করুন
APP_ENV=production

# 2. Error Logging সক্ষম করুন
error_reporting(E_ALL & ~E_DEPRECATED);
ini_set('display_errors', 0);
ini_set('log_errors', 1);

# 3. Database Backups সেটআপ করুন
mysqldump -u root -p gaming_tournament > backup_$(date +%Y%m%d).sql

# 4. Cron Job সেটআপ করুন (Daily Backup)
0 2 * * * mysqldump -u root -p gaming_tournament > /backups/db_$(date +\%Y\%m\%d).sql
```

---

## পারফরম্যান্স অপটিমাইজেশন

### 1. Database Indexes

```sql
-- ইতোমধ্যে schema.sql তে আছে, কিন্তু যদি যোগ করতে হয়:
CREATE INDEX idx_users_phone ON users(phone);
CREATE INDEX idx_matches_status ON matches(status);
CREATE INDEX idx_wallet_balance ON wallets(deposit_balance);
```

### 2. Query Optimization

```php
// ✓ সঠিক - সঠিক তথ্য নির্বাচন করুন
SELECT id, username, phone FROM users WHERE status = 'active';

// ✗ ভুল - সব তথ্য নির্বাচন করবেন না
SELECT * FROM users;
```

### 3. Caching (ভবিষ্যত)

```php
// Redis/Memcached দিয়ে cache করুন
$cache->remember('user_' . $userId, 3600, function() {
    return Database::fetch(...);
});
```

---

## বিকাশ টিপস

### Debug Mode চালু করুন

```php
// config/config.php তে:
define('DEBUG_MODE', true);

// তারপর যেকোনো ফাইলে:
if (DEBUG_MODE) {
    echo '<pre>';
    var_dump($data);
    echo '</pre>';
}
```

### Error Handling

```php
try {
    $result = Database::query($sql, $params);
} catch (PDOException $e) {
    error_log('DB Error: ' . $e->getMessage());
    // User-friendly message
    echo 'অপারেশন ব্যর্থ। অনুগ্রহ করে পুনরায় চেষ্টা করুন।';
}
```

---

## নিরাপত্তা চেকলিস্ট

- [ ] .env ফাইল গিটইগনোর করেছেন
- [ ] পাসওয়ার্ড হ্যাশ করা হচ্ছে (password_hash)
- [ ] SQL Injection প্রতিরোধ (PDO prepared statements)
- [ ] CSRF টোকেন ব্যবহার করছেন
- [ ] File uploads যাচাই করছেন
- [ ] XSS প্রতিরোধ (htmlspecialchars)
- [ ] SSL/HTTPS সক্ষম করেছেন (Production)
- [ ] Regular backups নিচ্ছেন
- [ ] Error logs সংরক্ষণ করছেন
- [ ] Admin অ্যাক্সেস সুরক্ষিত করেছেন

---

## সহায়তা

কোনো সমস্যা হলে:

1. **লগ ফাইল চেক করুন**
   ```bash
   tail -f storage/logs/error.log
   ```

2. **Database চেক করুন**
   ```bash
   mysql -u root -p gaming_tournament
   SHOW TABLES;
   ```

3. **PHP সংস্করণ চেক করুন**
   ```bash
   php -v
   ```

4. **README এবং INSTALLATION_GUIDE পড়ুন**

---

**সফল ইনস্টলেশনের জন্য শুভকামনা! 🎮**
