<?php

namespace App\Models;

use App\Enums\ReviewStatus;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

/**
 * نسخه به‌روزشده — نسخه Phase 13 را جایگزین کنید (اصلاح Workflow دو‌مرحله‌ای، بند ۳۴).
 */
class Review extends Model
{
    use HasFactory, SoftDeletes;

    protected $fillable = [
        'coach_request_id',
        'rating',
        'comment',
        'status',
        'rejection_reason',
        'coach_moderated_at',
        'admin_moderated_by',
        'admin_moderated_at',
    ];

    protected function casts(): array
    {
        return [
            'status' => ReviewStatus::class,
            'coach_moderated_at' => 'datetime',
            'admin_moderated_at' => 'datetime',
        ];
    }

    public function coachRequest()
    {
        return $this->belongsTo(CoachRequest::class);
    }

    public function adminModerator()
    {
        return $this->belongsTo(User::class, 'admin_moderated_by');
    }

    /**
     * رفع باگ: 'status' بدون پیشوند جدول، در Query هایی که از طریق
     * hasManyThrough با coach_requests جوین می‌خورند (مثل Coach::approvedReviews())
     * مبهم بود چون coach_requests هم ستون status دارد. همیشه با نام جدول کامل مشخص می‌شود.
     */
    public function scopeApproved($query)
    {
        return $query->where('reviews.status', ReviewStatus::Approved);
    }

    public function scopePendingCoach($query)
    {
        return $query->where('reviews.status', ReviewStatus::PendingCoach);
    }

    public function scopePendingAdmin($query)
    {
        return $query->where('reviews.status', ReviewStatus::PendingAdmin);
    }
}
