import type {
  CompanyEntitlements,
  EntitlementCatalogue,
  PlanEntitlements,
  SetOverridePayload,
  UpdatePlanEntitlementsPayload,
  UpsellSignalOptions,
  UpsellSignalRow,
} from "@/domain/entities/entitlement";
import type { BackendPaginatedData, PaginationQueryParams } from "@/shared/types";

export interface EntitlementRepository {
  getCatalogue(): Promise<EntitlementCatalogue>;
  getPlan(planId: number): Promise<PlanEntitlements>;
  updatePlan(planId: number, data: UpdatePlanEntitlementsPayload): Promise<PlanEntitlements>;
  /** companyId: the company account's id, as in the companies list. */
  getCompany(companyId: number): Promise<CompanyEntitlements>;
  setOverride(companyId: number, key: string, data: SetOverridePayload): Promise<CompanyEntitlements>;
  removeOverride(companyId: number, key: string): Promise<CompanyEntitlements>;
  resetUsage(companyId: number, key: string): Promise<CompanyEntitlements>;
  /** Upsell signals (freemium spec 8): the companies that hit a limit of their plan. */
  findUpsellSignals(params: PaginationQueryParams): Promise<BackendPaginatedData<UpsellSignalRow>>;
  getUpsellSignalOptions(): Promise<UpsellSignalOptions>;
  markUpsellSignalHandled(signalId: number): Promise<void>;
  reopenUpsellSignal(signalId: number): Promise<void>;
}
