export interface Store {
  id: number; code: string; name: string; city: string; state: string; zip: string
  address: string; phone: string; timezone: string; openTime: string; closeTime: string
  sameDayCutoff: string; deliveryRadiusMi: number; dailyCapacity: number
  lat: number; lng: number; active: boolean
}
export interface ProductSize { sizeCode: 'ORIGINAL' | 'DELUXE' | 'GRAND'; label: string; price: number; stemCount: number }
export interface ProductOption {
  id: number; productId: number; optionName: string; optionValue: string
  extraPrice: number; stock: number; optionType: 'VASE' | 'CARD_MESSAGE' | 'WRAP'
}
export interface Product {
  id: number; categoryId: number; sku: string; name: string; brand: string; description: string
  price: number; salePrice: number; status: string; stock: number; thumbnail: string
  occasion: string; flowerType: string; shelfLifeDays: number
  ratingAvg: number; reviewCount: number; salesCount: number
  options: ProductOption[]; images: string[]; sizes: ProductSize[]
}
export interface CartItem {
  id: number; productId: number; optionId: number; sizeCode: string
  cardMessage: string; quantity: number; productName?: string; thumbnail?: string; unitPrice?: number; price?: number
}
export interface ScheduleSlot {
  id: number; slotLabel: string; startTime: string; endTime: string; capacity: number; booked: number; available?: boolean
}
export interface Availability {
  storeId: number; date: string; blocked: boolean; surgeMultiplier: number
  sameDayAvailable: boolean; sameDayCutoff: string; slots: ScheduleSlot[]
}
export interface TierBenefit {
  id: number; tierCode: 'BASIC' | 'SILVER' | 'GOLD' | 'VIP'; name: string; tierRank: number
  minSpend12m: number; minOrders12m: number; discountRate: number; freeShipThreshold: number | null
  pointEarnRate: number; prioritySlot: boolean; birthdayCoupon: boolean; exclusiveEvents: boolean
  color: string; active: boolean
}
export interface MallEvent {
  id: number; code: string; title: string; eventType: string; description: string
  startDate: string; endDate: string; targetTiers: string; storeIds: string; couponId: number
  bonusPointRate: number; giftDescription: string; status: string; active: boolean; createdBy: string
  banners: EventBanner[]
}
export interface EventBanner {
  id: number; eventId: number; imageUrl: string; headline: string; subtext: string
  linkUrl: string; sortOrder: number; active: boolean
}
export interface Me { username: string; role: 'USER' | 'MANAGER' | 'ADMIN' }
