prepare("SELECT driver_id, passenger_id, status FROM ride WHERE id = ?"); $stmtRide->execute([$rideId]); $ride = $stmtRide->fetch(PDO::FETCH_ASSOC); if (!$ride) { jsonError("Ride not found"); exit; } if ((string)$ride['driver_id'] !== (string)$driverID) { jsonError("This ride does not belong to you"); exit; } if ((string)$ride['passenger_id'] !== (string)$passenger_id) { jsonError("Passenger does not match this ride"); exit; } if ($ride['status'] !== 'Finished') { jsonError("Ride must be finished before rating"); exit; } // 🔥 منع تكرار التقييم لنفس الرحلة من نفس السائق $stmtDup = $con->prepare("SELECT COUNT(*) FROM `ratingPassenger` WHERE rideId = ? AND driverID = ?"); $stmtDup->execute([$rideId, $driverID]); if ($stmtDup->fetchColumn() > 0) { jsonError("This ride has already been rated"); exit; } $sql = "INSERT INTO `ratingPassenger` ( `passenger_id`, `driverID`, `rideId`, `rating`, `comment` ) VALUES ( :passenger_id, :driverID, :rideId, :rating, :comment )"; $stmt = $con->prepare($sql); $stmt->bindParam(':passenger_id', $passenger_id); $stmt->bindParam(':driverID', $driverID); $stmt->bindParam(':rideId', $rideId); $stmt->bindParam(':rating', $rating); $stmt->bindParam(':comment', $comment); $stmt->execute(); if ($stmt->rowCount() > 0) { jsonSuccess(null, "Rate inserted successfully"); } else { jsonError("Failed to save rating information"); } } catch (PDOException $e) { error_log("[rate/add] DB Error: " . $e->getMessage() . " | RideID: $rideId"); jsonError("Database Error: Could not save rating"); } catch (Exception $e) { error_log("[rate/add] General Error: " . $e->getMessage()); jsonError("Error: Could not save rating"); } ?>