/**
 * 赛事模型
 */

export type EventStatus = 'upcoming' | 'registering' | 'closed' | 'ended'

/** 动态报名表单字段配置 */
export interface EventFormField {
  /** 字段唯一标识 */
  key: string
  /** 显示名称（后台可自定义） */
  label: string
  /** 字段类型：text-文本 number-数字 idcard-身份证 phone-手机号 select-下拉选择 radio-单选 */
  type: 'text' | 'number' | 'idcard' | 'phone' | 'select' | 'radio'
  /** 是否必填 1=必填 0=选填 */
  required: number
  /** 选项列表（type=select/radio时有效） */
  options?: string[]
  /** 占位提示文字 */
  placeholder?: string
  /** 排序号 */
  sort: number
}

export interface ShopEvent {
  id: number
  name: string
  description: string
  image?: string
  banner?: string
  eventDate: string
  location?: string
  maxParticipants: number
  entryFee: number
  /** 动态表单字段配置（JSON字符串或数组） */
  formFields?: string | EventFormField[]
  status: number | EventStatus
  isHot: number
  tenantId?: number
  createTime: string
  paidCount: number
}

export interface ShopEventParam {
  page?: number
  limit?: number
  status?: number
  isHot?: number
  tenantId?: number
}

export interface EventRegisterParams {
  eventId: number
  /** 动态表单数据，key-value 形式 */
  formData?: Record<string, string>
}

export interface EventRegistration {
  id: number
  eventId: number
  userId: number
  /** 动态表单提交的数据 */
  formData?: string | Record<string, string>
  entryFee: number
  payStatus: number  // 0=待缴费 1=已缴费 2=已取消
  orderNo?: string
  paidAt?: string
  createTime: string
  eventName?: string
}

export interface RegistrationStatus {
  registered: boolean
  payStatus: number | null
  registrationId?: number
}

// 状态映射
export function getEventStatusLabel(status: number): { label: string; color: string } {
  const map: Record<number, { label: string; color: string }> = {
    0: { label: '未开始', color: 'text-blue-500' },
    1: { label: '报名中', color: 'text-green-500' },
    2: { label: '已截止', color: 'text-orange-400' },
    3: { label: '已结束', color: 'text-gray-400' },
  }
  return map[status] ?? { label: '未知', color: 'text-gray-400' }
}

export function getPayStatusLabel(payStatus: number): { label: string; color: string } {
  const map: Record<number, { label: string; color: string }> = {
    0: { label: '待缴费', color: 'text-orange-500' },
    1: { label: '已缴费', color: 'text-green-500' },
    2: { label: '已取消', color: 'text-gray-400' },
  }
  return map[payStatus] ?? { label: '未知', color: 'text-gray-400' }
}
