/**
 * Repository Interface: IUserRatingRepository
 * 
 * Defines operations for UserRating value objects
 */

import type { UserRating } from '../value-objects/UserRating';

export interface IUserRatingRepository {
  /**
   * Find rating by user ID
   */
  findByUserId(userId: string): Promise<UserRating | null>;

  /**
   * Find ratings by multiple user IDs
   */
  findByUserIds(userIds: string[]): Promise<UserRating[]>;

  /**
   * Save or update a user rating
   */
  save(rating: UserRating): Promise<UserRating>;

  /**
   * Get top rated drivers
   */
  getTopDrivers(limit: number): Promise<UserRating[]>;

  /**
   * Get top trusted users
   */
  getTopTrusted(limit: number): Promise<UserRating[]>;

  /**
   * Get eligible stewards (based on trust and fairness thresholds)
   */
  getEligibleStewards(): Promise<UserRating[]>;

  /**
   * Get ratings by driver tier
   */
  findByDriverTier(tier: 'rookie' | 'amateur' | 'semi-pro' | 'pro' | 'elite'): Promise<UserRating[]>;

  /**
   * Delete rating by user ID
   */
  delete(userId: string): Promise<void>;
}