<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        // جدول المحفظة
        Schema::create('wallets', function (Blueprint $table) {
            $table->id();
            $table->foreignId('user_id')->constrained('users')->onDelete('cascade');
            $table->decimal('balance', 15, 2)->default(0.00); // الرصيد الحالي
            $table->decimal('total_earned', 15, 2)->default(0.00); // إجمالي الأرباح
            $table->decimal('total_withdrawn', 15, 2)->default(0.00); // إجمالي المسحوبات
            $table->decimal('pending_withdrawal', 15, 2)->default(0.00); // طلبات السحب المعلقة
            $table->boolean('is_active')->default(true); // حالة المحفظة
            $table->timestamps();
            
            $table->unique('user_id');
            $table->index('user_id');
        });

        // جدول معاملات المحفظة
        Schema::create('wallet_transactions', function (Blueprint $table) {
            $table->id();
            $table->foreignId('wallet_id')->constrained('wallets')->onDelete('cascade');
            $table->foreignId('user_id')->constrained('users')->onDelete('cascade');
            $table->enum('type', ['credit', 'debit']); // إيداع أو سحب
            $table->enum('source', ['referral_earning', 'withdrawal', 'refund', 'admin_adjustment']); // مصدر المعاملة
            $table->decimal('amount', 15, 2); // المبلغ
            $table->decimal('balance_before', 15, 2); // الرصيد قبل المعاملة
            $table->decimal('balance_after', 15, 2); // الرصيد بعد المعاملة
            $table->string('reference_type')->nullable(); // نوع المرجع (ReferralEarning, WithdrawalRequest, etc.)
            $table->unsignedBigInteger('reference_id')->nullable(); // معرف المرجع
            $table->text('description')->nullable(); // وصف المعاملة
            $table->text('notes')->nullable(); // ملاحظات إضافية
            $table->enum('status', ['pending', 'completed', 'failed', 'cancelled'])->default('completed');
            $table->timestamps();
            
            $table->index(['wallet_id', 'type']);
            $table->index(['user_id', 'created_at']);
            $table->index(['reference_type', 'reference_id']);
            $table->index('status');
        });

        // جدول طلبات السحب
        Schema::create('withdrawal_requests', function (Blueprint $table) {
            $table->id();
            $table->foreignId('user_id')->constrained('users')->onDelete('cascade');
            $table->foreignId('wallet_id')->constrained('wallets')->onDelete('cascade');
            $table->decimal('amount', 15, 2); // المبلغ المطلوب سحبه
            $table->enum('status', ['pending', 'approved', 'rejected', 'completed', 'cancelled'])->default('pending');
            $table->string('payment_method')->nullable(); // طريقة الدفع (حوالة بنكية، إيداع، etc.)
            $table->string('account_details')->nullable(); // تفاصيل الحساب (رقم الحساب، اسم البنك، etc.)
            $table->text('admin_notes')->nullable(); // ملاحظات المدير
            $table->text('rejection_reason')->nullable(); // سبب الرفض
            $table->timestamp('approved_at')->nullable();
            $table->timestamp('completed_at')->nullable();
            $table->foreignId('approved_by')->nullable()->constrained('users')->onDelete('set null');
            $table->timestamps();
            
            $table->index(['user_id', 'status']);
            $table->index('status');
            $table->index('created_at');
        });

        // إضافة حقل wallet_balance في جدول users (للتوافق)
        Schema::table('users', function (Blueprint $table) {
            $table->decimal('wallet_balance', 15, 2)->default(0.00)->after('status');
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('withdrawal_requests');
        Schema::dropIfExists('wallet_transactions');
        Schema::dropIfExists('wallets');
        
        Schema::table('users', function (Blueprint $table) {
            $table->dropColumn('wallet_balance');
        });
    }
};
