<?php

namespace App\Policies;

use App\Models\CoachRequest;
use App\Models\Review;
use App\Models\User;

/**
 * نسخه به‌روزشده — نسخه Phase 13 را جایگزین کنید (اصلاح Workflow دو‌مرحله‌ای).
 */
class ReviewPolicy
{
    public function viewAny(User $user): bool
    {
        return $user->isAdmin();
    }

    public function create(User $user, CoachRequest $request): bool
    {
        return $user->isAthlete()
            && $user->id === $request->athlete->user_id
            && $request->isActive();
    }

    public function view(User $user, Review $review): bool
    {
        if ($review->status->value === 'approved') {
            return true;
        }

        if ($user->isAdmin()) {
            return true;
        }

        return $user->id === $review->coachRequest->athlete->user_id
            || $user->id === $review->coachRequest->coach->user_id;
    }

    /**
     * مرحله ۱ — فقط مربیِ همان درخواست، فقط وقتی status=pending_coach.
     */
    public function coachModerate(User $user, Review $review): bool
    {
        return $user->isCoach()
            && $user->id === $review->coachRequest->coach->user_id
            && $review->status->value === 'pending_coach';
    }

    /**
     * مرحله ۲ — فقط Admin، فقط وقتی status=pending_admin.
     * Admin طبق بند ۵۱ همچنین می‌تواند نظر تأیید‌شده را هم بعداً حذف/رد کند (moderateAny).
     */
    public function adminModerate(User $user, Review $review): bool
    {
        return $user->isAdmin() && $review->status->value === 'pending_admin';
    }

    /**
     * توانایی گسترده‌تر: Admin در هر لحظه (حتی بعد از approved) بتواند نظر را حذف/رد کند
     * (بند ۳۴: «Admin بتواند نظر را حذف یا رد کند» — بدون قید به مرحله).
     */
    public function adminOverride(User $user, Review $review): bool
    {
        return $user->isAdmin();
    }
}
