<?php

declare(strict_types=1);

namespace App\Contracts\Repositories;

use App\Models\Review;
use Illuminate\Support\Collection;

interface ReviewRepositoryInterface
{
    /**
     * Find a review by ID
     */
    public function findById(int $id): ?Review;

    /**
     * Get all reviews for a property
     */
    public function getByProperty(int $propertyId): Collection;

    /**
     * Get approved reviews for a property
     */
    public function getApprovedByProperty(int $propertyId): Collection;

    /**
     * Get all reviews by a guest
     */
    public function getByGuest(int $guestId): Collection;

    /**
     * Get featured reviews
     */
    public function getFeatured(int $limit = 10): Collection;

    /**
     * Get reviews pending approval
     */
    public function getPending(): Collection;

    /**
     * Create a new review
     */
    public function create(array $data): Review;

    /**
     * Update a review
     */
    public function update(int $id, array $data): bool;

    /**
     * Delete a review
     */
    public function delete(int $id): bool;

    /**
     * Add owner response to review
     */
    public function addOwnerResponse(int $id, string $response): bool;

    /**
     * Toggle featured status
     */
    public function toggleFeatured(int $id): bool;

    /**
     * Update review status
     */
    public function updateStatus(int $id, string $status): bool;
}
