/**
 * Repository Interface: ISeasonSponsorshipRepository
 * 
 * Defines operations for SeasonSponsorship aggregate persistence
 */

import type { SeasonSponsorship, SponsorshipTier } from '../entities/SeasonSponsorship';

export interface ISeasonSponsorshipRepository {
  findById(id: string): Promise<SeasonSponsorship | null>;
  findBySeasonId(seasonId: string): Promise<SeasonSponsorship[]>;
  /**
   * Convenience lookup for aggregating sponsorships at league level.
   * Implementations should rely on the denormalized leagueId where present,
   * falling back to joining through Seasons if needed.
   */
  findByLeagueId(leagueId: string): Promise<SeasonSponsorship[]>;
  findBySponsorId(sponsorId: string): Promise<SeasonSponsorship[]>;
  findBySeasonAndTier(seasonId: string, tier: SponsorshipTier): Promise<SeasonSponsorship[]>;
  create(sponsorship: SeasonSponsorship): Promise<SeasonSponsorship>;
  update(sponsorship: SeasonSponsorship): Promise<SeasonSponsorship>;
  delete(id: string): Promise<void>;
  exists(id: string): Promise<boolean>;
}