/**
 * Presenter Interface: IGetMembershipFeesPresenter
 */

import type { Presenter } from '@core/shared/presentation/Presenter';
import type { MembershipFeeType } from '../../domain/entities/MembershipFee';
import type { MemberPaymentStatus } from '../../domain/entities/MemberPayment';

export interface MembershipFeeDto {
  id: string;
  leagueId: string;
  seasonId?: string;
  type: MembershipFeeType;
  amount: number;
  enabled: boolean;
  createdAt: Date;
  updatedAt: Date;
}

export interface MemberPaymentDto {
  id: string;
  feeId: string;
  driverId: string;
  amount: number;
  platformFee: number;
  netAmount: number;
  status: MemberPaymentStatus;
  dueDate: Date;
  paidAt?: Date;
}

export interface GetMembershipFeesResultDTO {
  fee: MembershipFeeDto | null;
  payments: MemberPaymentDto[];
}

export interface GetMembershipFeesViewModel {
  fee: MembershipFeeDto | null;
  payments: MemberPaymentDto[];
}

export interface IGetMembershipFeesPresenter extends Presenter<GetMembershipFeesResultDTO, GetMembershipFeesViewModel> {}