/**
 * Participation API Types
 * 이벤트 참여 관련 타입 정의
 */

/**
 * 참여 요청
 */
export interface ParticipationRequest {
  /** 이름 (2-50자, 필수) */
  name: string;
  /** 전화번호 (형식: "010-1234-5678", 필수) */
  phoneNumber: string;
  /** 이메일 (선택) */
  email?: string;
  /** 채널 (선택) */
  channel?: string;
  /** 마케팅 동의 (선택) */
  agreeMarketing?: boolean;
  /** 개인정보 동의 (필수) */
  agreePrivacy: boolean;
  /** 매장 방문 여부 (선택) */
  storeVisited?: boolean;
}

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

/**
 * API 공통 응답
 */
export interface ApiResponse<T> {
  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;
}

/**
 * 당첨자 추첨 요청
 */
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[];
}
