<?php

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

/**
 * طلبات شحن المحفظة (تأكيد يدوي من الإدارة)
 * المستخدم يدخل: كود التحويل، رقم المحوّل، صورة التحويل (اختياري)
 * الإدارة تؤكد وتفعّل الشحن ثم يُضاف المبلغ للمحفظة
 */
return new class extends Migration
{
    public function up(): void
    {
        Schema::create('partner_wallet_topup_requests', function (Blueprint $table) {
            $table->id();
            $table->foreignId('partner_wallet_id')->constrained('partner_wallets')->onDelete('cascade');
            $table->string('owner_type', 32); // restaurant | gas_office
            $table->unsignedBigInteger('owner_id');
            $table->decimal('amount', 15, 2);
            $table->string('payment_method', 64)->default('zain_cash'); // zain_cash | mastercard
            $table->string('transfer_code', 128)->nullable(); // كود التحويل
            $table->string('transfer_from_phone', 32)->nullable(); // رقم الذي حول منه
            $table->string('receipt_image_path')->nullable(); // صورة إيصال التحويل
            $table->enum('status', ['pending', 'approved', 'rejected'])->default('pending');
            $table->text('admin_notes')->nullable();
            $table->unsignedBigInteger('reviewed_by')->nullable();
            $table->timestamp('reviewed_at')->nullable();
            $table->timestamps();

            $table->index(['partner_wallet_id', 'status']);
            $table->index(['owner_type', 'owner_id']);
            $table->index('status');
            $table->index('created_at');
        });

        // إضافة رقم زين كاش وإعدادات الشحن في app_settings إن وُجد الجدول
        if (Schema::hasTable('app_settings')) {
            Schema::table('app_settings', function (Blueprint $table) {
                if (!Schema::hasColumn('app_settings', 'wallet_zain_cash_phone')) {
                    $table->string('wallet_zain_cash_phone', 32)->nullable()->after('gas_subscription_enabled');
                }
                if (!Schema::hasColumn('app_settings', 'wallet_topup_instructions')) {
                    $table->text('wallet_topup_instructions')->nullable()->after('wallet_zain_cash_phone');
                }
            });
        }
    }

    public function down(): void
    {
        Schema::dropIfExists('partner_wallet_topup_requests');
        if (Schema::hasTable('app_settings')) {
            Schema::table('app_settings', function (Blueprint $table) {
                if (Schema::hasColumn('app_settings', 'wallet_zain_cash_phone')) {
                    $table->dropColumn('wallet_zain_cash_phone');
                }
                if (Schema::hasColumn('app_settings', 'wallet_topup_instructions')) {
                    $table->dropColumn('wallet_topup_instructions');
                }
            });
        }
    }
};
