<?php

namespace App\Models;

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

class ReferralEarning extends Model
{
    use HasFactory;

    protected $fillable = [
        'referral_id',
        'referrer_id',
        'referred_id',
        'order_type',
        'order_id',
        'order_number',
        'order_total',
        'profit_percentage',
        'earnings',
        'status',
        'paid_at',
        'notes',
    ];

    protected $casts = [
        'order_total' => 'decimal:2',
        'profit_percentage' => 'decimal:4',
        'earnings' => 'decimal:2',
        'paid_at' => 'datetime',
    ];

    /**
     * الإحالة المرتبطة بهذا الربح
     */
    public function referral()
    {
        return $this->belongsTo(Referral::class);
    }

    /**
     * المستخدم الذي قام بالدعوة (يحصل على الربح)
     */
    public function referrer()
    {
        return $this->belongsTo(User::class, 'referrer_id');
    }

    /**
     * المستخدم الذي تم دعوته (قام بالطلب)
     */
    public function referred()
    {
        return $this->belongsTo(User::class, 'referred_id');
    }

    /**
     * حساب الأرباح من قيمة الطلبية
     */
    public static function calculateEarnings($orderTotal, $profitPercentage = 0.00025)
    {
        return $orderTotal * $profitPercentage;
    }

    /**
     * إنشاء سجل ربح جديد عند إتمام طلبية
     */
    public static function createFromOrder($referral, $orderType, $orderId, $orderNumber, $orderTotal)
    {
        $earnings = self::calculateEarnings($orderTotal);
        
        return self::create([
            'referral_id' => $referral->id,
            'referrer_id' => $referral->referrer_id,
            'referred_id' => $referral->referred_id,
            'order_type' => $orderType,
            'order_id' => $orderId,
            'order_number' => $orderNumber,
            'order_total' => $orderTotal,
            'profit_percentage' => 0.00025,
            'earnings' => $earnings,
            'status' => 'pending',
        ]);
    }

    /**
     * الموافقة على الربح وإضافته للمحفظة تلقائياً
     */
    public function approve()
    {
        if ($this->status !== 'pending') {
            throw new \Exception('لا يمكن الموافقة على ربح غير معلق');
        }

        // إضافة المبلغ للمحفظة تلقائياً أولاً
        $wallet = \App\Models\Wallet::getOrCreateForUser($this->referrer_id);
        $wallet->addBalance(
            $this->earnings,
            'referral_earning',
            ReferralEarning::class,
            $this->id,
            'ربح من دعوة - طلبية رقم: ' . $this->order_number
        );

        // تحديث حالة الربح إلى approved
        $this->update([
            'status' => 'approved',
        ]);

        // تحديث إجمالي الأرباح في جدول referrals
        $referral = $this->referral;
        if ($referral) {
            $referral->increment('total_earnings', $this->earnings);
        }
    }

    /**
     * دفع الربح للمحفظة (تم إلغاء استخدامه - يتم الإضافة تلقائياً عند الموافقة)
     */
    public function markAsPaid()
    {
        // إذا كان الحالة pending، قم بالموافقة أولاً (والتي تضيف للمحفظة تلقائياً)
        if ($this->status === 'pending') {
            $this->approve();
        }

        // تحديث الحالة إلى paid
        $this->update([
            'status' => 'paid',
            'paid_at' => now(),
        ]);
    }
}
