<?php
/**
 * Avatar System Management
 * سیستم آواتار کاربران
 */

namespace GemAcc;

use PDO;

class Avatar
{
    private PDO $pdo;
    
    // تعداد کل آواتارها
    const TOTAL_AVATARS = 10;
    
    // تعداد خرید لازم برای باز کردن هر آواتار
    const UNLOCK_REQUIREMENTS = [
        1 => 0,   // پیش‌فرض - همیشه باز
        2 => 1,   // بعد از ۱ خرید
        3 => 2,   // بعد از ۲ خرید
        4 => 3,   // بعد از ۳ خرید
        5 => 5,   // بعد از ۵ خرید
        6 => 7,   // بعد از ۷ خرید
        7 => 10,  // بعد از ۱۰ خرید
        8 => 15,  // بعد از ۱۵ خرید
        9 => 20,  // بعد از ۲۰ خرید
        10 => 30, // بعد از ۳۰ خرید (ویژه)
    ];
    
    // نام آواتارها
    const AVATAR_NAMES = [
        1 => 'کاربر جدید',
        2 => 'خریدار',
        3 => 'مشتری وفادار',
        4 => 'کاربر برنزی',
        5 => 'کاربر نقره‌ای',
        6 => 'کاربر طلایی',
        7 => 'کاربر پلاتینی',
        8 => 'کاربر الماسی',
        9 => 'کاربر افسانه‌ای',
        10 => 'کاربر اسطوره‌ای',
    ];
    
    public function __construct(PDO $pdo)
    {
        $this->pdo = $pdo;
    }
    
    /**
     * گرفتن اطلاعات آواتار کاربر
     */
    public function getUserAvatar(int $userId): array
    {
        $stmt = $this->pdo->prepare("SELECT * FROM user_avatars WHERE user_id = ?");
        $stmt->execute([$userId]);
        $data = $stmt->fetch(PDO::FETCH_ASSOC);
        
        if (!$data) {
            // ایجاد رکورد پیش‌فرض
            $this->createDefault($userId);
            return [
                'user_id'          => $userId,
                'current_avatar'   => 1,
                'unlocked_avatars' => [1],
            ];
        }
        
        return [
            'user_id'          => $userId,
            'current_avatar'   => (int)$data['current_avatar'],
            'unlocked_avatars' => array_map('intval', explode(',', $data['unlocked_avatars'])),
        ];
    }
    
    /**
     * ایجاد رکورد پیش‌فرض
     */
    public function createDefault(int $userId): bool
    {
        $stmt = $this->pdo->prepare("
            INSERT IGNORE INTO user_avatars (user_id, current_avatar, unlocked_avatars)
            VALUES (?, 1, '1')
        ");
        return $stmt->execute([$userId]);
    }
    
    /**
     * تغییر آواتار فعلی
     */
    public function setAvatar(int $userId, int $avatarId): bool
    {
        $userAvatar = $this->getUserAvatar($userId);
        
        // بررسی که آواتار باز شده باشد
        if (!in_array($avatarId, $userAvatar['unlocked_avatars'])) {
            return false;
        }
        
        $stmt = $this->pdo->prepare("
            UPDATE user_avatars SET current_avatar = ? WHERE user_id = ?
        ");
        return $stmt->execute([$avatarId, $userId]);
    }
    
    /**
     * باز کردن آواتار جدید
     */
    public function unlockAvatar(int $userId, int $avatarId): bool
    {
        $userAvatar = $this->getUserAvatar($userId);
        
        // اگر قبلاً باز شده
        if (in_array($avatarId, $userAvatar['unlocked_avatars'])) {
            return true;
        }
        
        $unlocked = $userAvatar['unlocked_avatars'];
        $unlocked[] = $avatarId;
        sort($unlocked);
        
        $stmt = $this->pdo->prepare("
            UPDATE user_avatars SET unlocked_avatars = ? WHERE user_id = ?
        ");
        return $stmt->execute([implode(',', $unlocked), $userId]);
    }
    
    /**
     * بررسی و باز کردن آواتارهای جدید بر اساس تعداد خرید
     * @return array آواتارهای جدید باز شده
     */
    public function checkAndUnlockAvatars(int $userId, int $purchaseCount): array
    {
        $userAvatar = $this->getUserAvatar($userId);
        $newlyUnlocked = [];
        
        foreach (self::UNLOCK_REQUIREMENTS as $avatarId => $requiredPurchases) {
            if ($purchaseCount >= $requiredPurchases && !in_array($avatarId, $userAvatar['unlocked_avatars'])) {
                $this->unlockAvatar($userId, $avatarId);
                $newlyUnlocked[] = $avatarId;
            }
        }
        
        return $newlyUnlocked;
    }
    
    /**
     * گرفتن لیست تمام آواتارها با وضعیت
     */
    public function getAllAvatarsWithStatus(int $userId, int $purchaseCount): array
    {
        $userAvatar = $this->getUserAvatar($userId);
        $avatars = [];
        
        for ($i = 1; $i <= self::TOTAL_AVATARS; $i++) {
            $isUnlocked = in_array($i, $userAvatar['unlocked_avatars']);
            $isCurrent = ($userAvatar['current_avatar'] === $i);
            $required = self::UNLOCK_REQUIREMENTS[$i];
            $canUnlock = ($purchaseCount >= $required);
            
            $avatars[] = [
                'id'           => $i,
                'name'         => self::AVATAR_NAMES[$i],
                'is_unlocked'  => $isUnlocked,
                'is_current'   => $isCurrent,
                'required'     => $required,
                'can_unlock'   => $canUnlock,
                'progress'     => min(100, ($required > 0 ? ($purchaseCount / $required) * 100 : 100)),
            ];
        }
        
        return $avatars;
    }
    
    /**
     * گرفتن URL آواتار
     */
    public static function getAvatarUrl(int $avatarId): string
    {
        // می‌توانید آدرس‌های واقعی آواتار را اینجا قرار دهید
        return "avatars/avatar_{$avatarId}.png";
    }
    
    /**
     * گرفتن ایموجی آواتار
     */
    public static function getAvatarEmoji(int $avatarId): string
    {
        $emojis = [
            1 => '👤',
            2 => '🛒',
            3 => '⭐',
            4 => '🥉',
            5 => '🥈',
            6 => '🥇',
            7 => '💎',
            8 => '💠',
            9 => '🔥',
            10 => '👑',
        ];
        return $emojis[$avatarId] ?? '👤';
    }
}

