<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class WithdrawalRequest extends Model
{
    use HasFactory;

    protected $fillable = [
        'user_id',
        'wallet_id',
        'amount',
        'status',
        'payment_method',
        'account_details',
        'admin_notes',
        'rejection_reason',
        'approved_at',
        'completed_at',
        'approved_by',
    ];

    protected $casts = [
        'amount' => 'decimal:2',
        'approved_at' => 'datetime',
        'completed_at' => 'datetime',
    ];

    /**
     * المستخدم المالك لطلب السحب
     */
    public function user()
    {
        return $this->belongsTo(User::class);
    }

    /**
     * المحفظة المرتبطة بطلب السحب
     */
    public function wallet()
    {
        return $this->belongsTo(Wallet::class);
    }

    /**
     * المدير الذي وافق على الطلب
     */
    public function approver()
    {
        return $this->belongsTo(User::class, 'approved_by');
    }

    /**
     * الموافقة على طلب السحب
     */
    public function approve($adminId = null)
    {
        $this->update([
            'status' => 'approved',
            'approved_at' => now(),
            'approved_by' => $adminId ?? auth()->id(),
        ]);

        // تحديث المبلغ المعلق في المحفظة
        $this->wallet->increment('pending_withdrawal', $this->amount);
    }

    /**
     * رفض طلب السحب
     */
    public function reject($reason = null)
    {
        $this->update([
            'status' => 'rejected',
            'rejection_reason' => $reason,
        ]);
    }

    /**
     * إكمال طلب السحب (بعد الدفع الفعلي)
     */
    public function complete()
    {
        $this->update([
            'status' => 'completed',
            'completed_at' => now(),
        ]);

        // خصم المبلغ من المحفظة
        $this->wallet->deductBalance(
            $this->amount,
            'withdrawal',
            WithdrawalRequest::class,
            $this->id,
            'سحب من المحفظة - طلب رقم: ' . $this->id
        );

        // تقليل المبلغ المعلق
        $this->wallet->decrement('pending_withdrawal', $this->amount);
    }
}
