<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\User;
use App\Models\UserPoints;
use App\Models\PointTransaction;
use App\Models\EntertainmentWheel;
use App\Models\EntertainmentMining;
use App\Models\EntertainmentGem;
use App\Models\EntertainmentPurchase;
use Illuminate\Support\Facades\DB;
use Carbon\Carbon;

class EntertainmentController extends Controller
{
    /**
     * الحصول على معلومات عجلة الحظ
     */
    public function getWheelInfo()
    {
        try {
            $user = auth()->user();
            
            // الحصول على المحاولات المجانية (يومياً)
            $lastFreeSpin = EntertainmentWheel::where('user_id', $user->id)
                ->where('is_free', true)
                ->whereDate('created_at', Carbon::today())
                ->first();
            
            $freeSpins = $lastFreeSpin ? 0 : 1; // محاولة مجانية واحدة يومياً
            
            // الحصول على المحاولات المدفوعة
            $paidSpins = EntertainmentWheel::where('user_id', $user->id)
                ->where('is_free', false)
                ->whereDate('created_at', Carbon::today())
                ->count();
            
            // الحصول على الجواهر
            $gems = $user->gems ?? 0;
            
            return response()->json([
                'success' => true,
                'data' => [
                    'free_spins' => $freeSpins,
                    'paid_spins' => $paidSpins,
                    'gems' => $gems,
                ]
            ]);
            
        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'message' => 'خطأ في جلب معلومات عجلة الحظ: ' . $e->getMessage()
            ], 500);
        }
    }
    
    /**
     * تدوير عجلة الحظ
     */
    public function spinWheel(Request $request)
    {
        try {
            $user = auth()->user();
            $isFree = $request->input('is_free', true);
            $prizeType = $request->input('prize_type');
            $prizeEmoji = $request->input('prize_emoji');
            $prizeDescription = $request->input('prize_description');
            
            // التحقق من المحاولات المتاحة
            if ($isFree) {
                $lastFreeSpin = EntertainmentWheel::where('user_id', $user->id)
                    ->where('is_free', true)
                    ->whereDate('created_at', Carbon::today())
                    ->first();
                
                if ($lastFreeSpin) {
                    return response()->json([
                        'success' => false,
                        'message' => 'لقد استخدمت المحاولة المجانية اليوم'
                    ], 400);
                }
            } else {
                // التحقق من الجواهر
                $gems = $user->gems ?? 0;
                if ($gems < 10) {
                    return response()->json([
                        'success' => false,
                        'message' => 'ليس لديك جواهر كافية (تحتاج 10 جواهر)'
                    ], 400);
                }
                
                // خصم الجواهر
                $user->gems = $gems - 10;
                $user->save();
            }
            
            // إنشاء سجل التدوير
            $wheelRecord = EntertainmentWheel::create([
                'user_id' => $user->id,
                'is_free' => $isFree,
                'prize_type' => $prizeType,
                'prize_emoji' => $prizeEmoji,
                'prize_description' => $prizeDescription,
                'spun_at' => now(),
            ]);
            
            // تطبيق الجائزة
            $this->applyPrize($user, $prizeType, $prizeDescription);
            
            return response()->json([
                'success' => true,
                'message' => 'تم تدوير العجلة بنجاح',
                'data' => [
                    'prize' => $prizeType,
                    'emoji' => $prizeEmoji,
                    'description' => $prizeDescription,
                ]
            ]);
            
        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'message' => 'خطأ في تدوير العجلة: ' . $e->getMessage()
            ], 500);
        }
    }
    
    /**
     * تطبيق الجائزة
     */
    private function applyPrize($user, $prizeType, $prizeDescription)
    {
        switch ($prizeType) {
            case 'رحلة مجانية':
                // إضافة رصيد مجاني للرحلات
                $user->free_rides = ($user->free_rides ?? 0) + 1;
                $user->save();
                break;
                
            case 'وجبة طعام مجانية':
                // إضافة رصيد مجاني للطعام
                $user->free_meals = ($user->free_meals ?? 0) + 1;
                $user->save();
                break;
                
            case 'خصم 20%':
            case 'خصم 50%':
                // إضافة خصم
                $discount = strpos($prizeType, '20%') !== false ? 20 : 50;
                $user->discounts = ($user->discounts ?? 0) + $discount;
                $user->save();
                break;
                
            case '50 نقطة':
            case '150 نقطة':
                // إضافة نقاط
                $points = strpos($prizeType, '50') !== false ? 50 : 150;
                $user->addPoints($points, $prizeDescription, 'wheel_prize');
                break;
                
            case '5 جواهر':
                // إضافة جواهر
                $user->gems = ($user->gems ?? 0) + 5;
                $user->save();
                break;
        }
    }
    
    /**
     * الحصول على بيانات التعدين
     */
    public function getMiningData()
    {
        try {
            $user = auth()->user();
            
            // الحصول على بيانات التعدين اليومية
            $miningData = EntertainmentMining::where('user_id', $user->id)
                ->whereDate('created_at', Carbon::today())
                ->first();
            
            if (!$miningData) {
                // إنشاء بيانات جديدة للتعدين
                $miningData = EntertainmentMining::create([
                    'user_id' => $user->id,
                    'current_points' => 0,
                    'daily_points' => 0,
                    'mining_speed' => 1,
                    'last_mining' => now(),
                ]);
            }
            
            return response()->json([
                'success' => true,
                'data' => [
                    'current_points' => $miningData->current_points,
                    'daily_points' => $miningData->daily_points,
                    'gems' => $user->gems ?? 0,
                    'mining_speed' => $miningData->mining_speed,
                ]
            ]);
            
        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'message' => 'خطأ في جلب بيانات التعدين: ' . $e->getMessage()
            ], 500);
        }
    }
    
    /**
     * تحديث بيانات التعدين
     */
    public function updateMiningData(Request $request)
    {
        try {
            $user = auth()->user();
            
            $miningData = EntertainmentMining::where('user_id', $user->id)
                ->whereDate('created_at', Carbon::today())
                ->first();
            
            if (!$miningData) {
                $miningData = EntertainmentMining::create([
                    'user_id' => $user->id,
                    'current_points' => 0,
                    'daily_points' => 0,
                    'mining_speed' => 1,
                    'last_mining' => now(),
                ]);
            }
            
            $miningData->current_points = $request->input('current_points', $miningData->current_points);
            $miningData->daily_points = $request->input('daily_points', $miningData->daily_points);
            $miningData->mining_speed = $request->input('mining_speed', $miningData->mining_speed);
            $miningData->last_mining = now();
            $miningData->save();
            
            // تحديث الجواهر إذا تم توفيرها
            if ($request->has('gems')) {
                $user->gems = $request->input('gems');
                $user->save();
            }
            
            return response()->json([
                'success' => true,
                'message' => 'تم تحديث بيانات التعدين بنجاح'
            ]);
            
        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'message' => 'خطأ في تحديث بيانات التعدين: ' . $e->getMessage()
            ], 500);
        }
    }
    
    /**
     * الحصول على بيانات المستخدم
     */
    public function getUserData()
    {
        try {
            $user = auth()->user();
            
            return response()->json([
                'success' => true,
                'data' => [
                    'gems' => $user->gems ?? 0,
                    'points' => $user->getAvailablePoints(),
                ]
            ]);
            
        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'message' => 'خطأ في جلب بيانات المستخدم: ' . $e->getMessage()
            ], 500);
        }
    }
    
    /**
     * تحديث بيانات المستخدم
     */
    public function updateUserData(Request $request)
    {
        try {
            $user = auth()->user();
            
            if ($request->has('gems')) {
                $user->gems = $request->input('gems');
            }
            
            if ($request->has('points')) {
                $user->addPoints($request->input('points'), 'شراء جواهر', 'gem_purchase');
            }
            
            $user->save();
            
            return response()->json([
                'success' => true,
                'message' => 'تم تحديث بيانات المستخدم بنجاح'
            ]);
            
        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'message' => 'خطأ في تحديث بيانات المستخدم: ' . $e->getMessage()
            ], 500);
        }
    }
    
    /**
     * شراء حزمة جواهر
     */
    public function buyGemPackage(Request $request)
    {
        try {
            $user = auth()->user();
            $packageId = $request->input('package_id');
            $gems = $request->input('gems');
            $price = $request->input('price');
            
            // إنشاء سجل الشراء
            EntertainmentPurchase::create([
                'user_id' => $user->id,
                'package_id' => $packageId,
                'gems' => $gems,
                'price' => $price,
                'purchased_at' => now(),
            ]);
            
            // إضافة الجواهر للمستخدم
            $user->gems = ($user->gems ?? 0) + $gems;
            $user->save();
            
            // إضافة نقاط إضافية للتعدين
            $user->addPoints($gems, 'شراء حزمة جواهر', 'gem_purchase');
            
            return response()->json([
                'success' => true,
                'message' => 'تم شراء حزمة الجواهر بنجاح',
                'data' => [
                    'gems' => $user->gems,
                    'points' => $user->getAvailablePoints(),
                ]
            ]);
            
        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'message' => 'خطأ في شراء حزمة الجواهر: ' . $e->getMessage()
            ], 500);
        }
    }
    
    /**
     * الحصول على تاريخ التعدين
     */
    public function getMiningHistory()
    {
        try {
            $user = auth()->user();
            
            $history = EntertainmentMining::where('user_id', $user->id)
                ->orderBy('created_at', 'desc')
                ->limit(30)
                ->get();
            
            return response()->json([
                'success' => true,
                'data' => [
                    'history' => $history
                ]
            ]);
            
        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'message' => 'خطأ في جلب تاريخ التعدين: ' . $e->getMessage()
            ], 500);
        }
    }
    
    /**
     * الحصول على تاريخ عجلة الحظ
     */
    public function getWheelHistory()
    {
        try {
            $user = auth()->user();
            
            $history = EntertainmentWheel::where('user_id', $user->id)
                ->orderBy('created_at', 'desc')
                ->limit(30)
                ->get();
            
            return response()->json([
                'success' => true,
                'data' => [
                    'history' => $history
                ]
            ]);
            
        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'message' => 'خطأ في جلب تاريخ عجلة الحظ: ' . $e->getMessage()
            ], 500);
        }
    }
}
