<?php

namespace App\Models;

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

class PointRedemption extends Model
{
    use HasFactory;

    protected $fillable = [
        'user_id',
        'reward_id',
        'points_used',
        'status',
        'redemption_code',
        'notes',
        'approved_at',
        'completed_at',
    ];

    protected $casts = [
        'approved_at' => 'datetime',
        'completed_at' => 'datetime',
    ];

    /**
     * المستخدم الذي قام بالاسترداد
     */
    public function user()
    {
        return $this->belongsTo(User::class);
    }

    /**
     * المكافأة المستردة
     */
    public function reward()
    {
        return $this->belongsTo(PointReward::class);
    }

    /**
     * إنشاء كود استرداد فريد
     */
    public static function generateRedemptionCode()
    {
        do {
            $code = 'RED' . strtoupper(substr(md5(uniqid()), 0, 8));
        } while (self::where('redemption_code', $code)->exists());

        return $code;
    }

    /**
     * الموافقة على الاسترداد
     */
    public function approve()
    {
        $this->update([
            'status' => 'approved',
            'approved_at' => now(),
        ]);
    }

    /**
     * إكمال الاسترداد
     */
    public function complete()
    {
        $this->update([
            'status' => 'completed',
            'completed_at' => now(),
        ]);

        // زيادة عدد الاستردادات للمكافأة
        $this->reward->incrementRedemptions();
    }
}
