// ===================================
// Common API Response Types
// ===================================

/**
 * 공통 API 응답 래퍼
 */
export interface ApiResponse<T = unknown> {
  success: boolean;
  data: T;
  errorCode?: string;
  message?: string;
  timestamp: string;
}

/**
 * 페이징 응답
 */
export interface PageResponse<T> {
  content: T[];
  page: number;
  size: number;
  totalElements: number;
  totalPages: number;
  first: boolean;
  last: boolean;
}

// ===================================
// Participation API Types
// ===================================

/**
 * 이벤트 참여 요청
 */
export interface ParticipationRequest {
  /** 이름 (2-50자, 필수) */
  name: string;
  /** 전화번호 (패턴: ^\d{3}-\d{3,4}-\d{4}$, 필수) */
  phoneNumber: string;
  /** 이메일 (선택) */
  email?: string;
  /** 참여 경로 (선택) */
  channel?: string;
  /** 마케팅 동의 (선택) */
  agreeMarketing?: boolean;
  /** 개인정보 수집 동의 (필수) */
  agreePrivacy: boolean;
  /** 매장 방문 여부 (선택) */
  storeVisited?: boolean;
}

/**
 * 참여자 정보 응답
 */
export interface ParticipationResponse {
  /** 참여자 ID */
  participantId: string;
  /** 이벤트 ID */
  eventId: string;
  /** 이름 */
  name: string;
  /** 전화번호 */
  phoneNumber: string;
  /** 이메일 */
  email?: string;
  /** 참여 경로 */
  channel?: string;
  /** 참여 일시 */
  participatedAt: string;
  /** 매장 방문 여부 */
  storeVisited: boolean;
  /** 보너스 응모권 수 */
  bonusEntries: number;
  /** 당첨 여부 */
  isWinner: boolean;
}

/**
 * 참여자 목록 조회 파라미터
 */
export interface GetParticipantsParams {
  /** 이벤트 ID */
  eventId: string;
  /** 매장 방문 여부 필터 (true: 방문자만, false: 미방문자만, null: 전체) */
  storeVisited?: boolean;
  /** 페이지 번호 (0부터 시작) */
  page?: number;
  /** 페이지 크기 */
  size?: number;
  /** 정렬 기준 (예: createdAt,DESC) */
  sort?: string[];
}

// ===================================
// Winner API Types
// ===================================

/**
 * 당첨자 추첨 요청
 */
export interface DrawWinnersRequest {
  /** 당첨자 수 (최소 1) */
  winnerCount: number;
  /** 매장 방문 보너스 적용 여부 */
  applyStoreVisitBonus?: boolean;
}

/**
 * 당첨자 요약 정보
 */
export interface WinnerSummary {
  /** 참여자 ID */
  participantId: string;
  /** 이름 */
  name: string;
  /** 전화번호 */
  phoneNumber: string;
  /** 등수 */
  rank: number;
}

/**
 * 당첨자 추첨 응답
 */
export interface DrawWinnersResponse {
  /** 이벤트 ID */
  eventId: string;
  /** 전체 참여자 수 */
  totalParticipants: number;
  /** 당첨자 수 */
  winnerCount: number;
  /** 추첨 일시 */
  drawnAt: string;
  /** 당첨자 목록 */
  winners: WinnerSummary[];
}

/**
 * 당첨자 목록 조회 파라미터
 */
export interface GetWinnersParams {
  /** 이벤트 ID */
  eventId: string;
  /** 페이지 번호 (0부터 시작) */
  page?: number;
  /** 페이지 크기 */
  size?: number;
  /** 정렬 기준 (예: winnerRank,ASC) */
  sort?: string[];
}
