/**
 * DTOs for Admin Vote Session Use Cases
 */

/**
 * Input for OpenAdminVoteSessionUseCase
 */
export interface OpenAdminVoteSessionInput {
  voteSessionId: string;
  leagueId: string;
  adminId: string;
  startDate: string; // ISO date string
  endDate: string; // ISO date string
  eligibleVoters: string[]; // User IDs
}

/**
 * Output for OpenAdminVoteSessionUseCase
 */
export interface OpenAdminVoteSessionOutput {
  success: boolean;
  voteSessionId: string;
  errors?: string[];
}

/**
 * Input for CastAdminVoteUseCase
 */
export interface CastAdminVoteInput {
  voteSessionId: string;
  voterId: string;
  positive: boolean; // true = positive vote, false = negative vote
  votedAt?: string; // ISO date string (optional, defaults to now)
}

/**
 * Output for CastAdminVoteUseCase
 */
export interface CastAdminVoteOutput {
  success: boolean;
  voteSessionId: string;
  voterId: string;
  errors?: string[];
}

/**
 * Input for CloseAdminVoteSessionUseCase
 */
export interface CloseAdminVoteSessionInput {
  voteSessionId: string;
  adminId: string; // For validation
}

/**
 * Output for CloseAdminVoteSessionUseCase
 */
export interface CloseAdminVoteSessionOutput {
  success: boolean;
  voteSessionId: string;
  outcome?: {
    percentPositive: number;
    count: {
      positive: number;
      negative: number;
      total: number;
    };
    eligibleVoterCount: number;
    participationRate: number;
    outcome: 'positive' | 'negative' | 'tie';
  };
  eventsCreated?: number;
  errors?: string[];
}
