/**
 * @typedef {("next"|"current"|"end"|"save"|"scheduler")} FlashSaleQueryStatus

/**
 * @typedef {object} FlashSaleProduct
 * @property {number} itemId
 * @property {number} modelId
 * @property {string} name
 * @property {string} modelName
 * @property {string} image
 * @property {number} stock
 * @property {number} stockTotal
 * @property {number} stockreserved
 * @property {number} stockCurrent
 * @property {number} stockMax
 * @property {number} purchaseMax
 * @property {number} priceOrginal
 * @property {number} priceDiscounted
 * @property {number} maxPromotion
 * @property {number} minPromotion
 * @property {number} priceCampaign
 * @property {number} pricePromotion
 * @property {number} priceBase
 * @property {number} stockLimit
 * @property {number} purchaseLimit
 * @property {boolean} status
 * @property {boolean} isFirstModel
 * @property {string} url
 */

/**
 * @typedef {object} FlashSaleCampagin
 * @property {string} _id
 * @property {string} name
 * @property {string} shopId
 * @property {string} shopName
 * @property {string} description
 * @property {string} timeName
 * @property {number|string} flashSaleId
 * @property {number} timeId
 * @property {string} timeStart
 * @property {string} timeEnd
 * @property {string} timeCreate
 * @property {string} timeUpdate
 * @property {number} productCount
 * @property {number} productEnable
 * @property {string} status
 * @property {string} urlOpen
 * @property {string} urlClone
 * @property {boolean} fromSave
 * @property {boolean} fromScheduler
 * @property {boolean} isOwned
 */

/**
 * @typedef {object} FlashSaleScheduler
 * @property {string} _id
 * @property {number} productCount
 * @property {number} timeId
 * @property {string} message
 * @property {string} campaginRef
 * @property {string} campaginName
 * @property {string} flashsaleId
 * @property {TimeSlot} timeSlot
 * @property {ListSet[]} listSet
 * @property {ListIndex[]} listIndex
 */
/**
 * @typedef {object} TimeSlot
 * @property {string} label
 * @property {string} labelTime
 * @property {string} startTime
 * @property {string} endTime
 * @property {number} value
 * @property {number} timeId
 * @property {number} flashSaleId
 * @property {number} productCount
 */
/**
 * @typedef {object} ListSet
 * @property {number} item_id
 * @property {number} status
 * @property {number} model_id
 * @property {number} input_promo_price
 * @property {number} stock
 * @property {number} purchase_limit
 */
/**
 * @typedef {object} ListIndex
 * @property {number} item_id
 * @property {number} display_sequence
 */

/**
 * @typedef {object} FlashsaleReport
 * @property {string} time
 * @property {number} total
 * @property {number} saleTotal
 * @property {number} orderCount
 * @property {number} buyerCount
 * @property {number} clickCount
 * @property {number} impressionCount
 */

/**
 * @typedef {object} FlashSaleListScheduler
 * @property {string} _id
 * @property {string} userRef
 * @property {string} shopRef
 * @property {string} name
 * @property {string} flashsaleId
 * @property {string} shopId
 * @property {string} timeLabel
 * @property {string} timeId
 * @property {number} productCount
 * @property {number} timeBefore
 * @property {TimeSlot} timeSlot
 * @property {string} campaignName
 * @property {string} campaignRef
 * @property {string} timeSchedule
 * @property {string} timeFlashsale
 * @property {boolean} isDone
 * @property {boolean} isError
 * @property {boolean} isSuccess
 * @property {boolean} active
 * @property {string} status
 * @property {Error} error
 * @property {string} timeCreate
 * @property {string} timeUpdate
 * @property {string} createdAt
 * @property {string} updatedAt
 * @property {string} timeSet
 * @property {string} message
 */
/**
 * @typedef {object} TimeSlot
 * @property {string} label
 * @property {string} labelTime
 * @property {string} date
 * @property {string} startTime
 * @property {string} endTime
 * @property {number} value
 * @property {number} timeId
 * @property {number} flashSaleId
 * @property {number} productCount
 * @property {boolean} isParent
 * @property {string} text
 */
/**
 * @typedef {object} Error
 * @property {string} message
 */

/**
 * @typedef {object} FlashSaleCampaignScheduler
 * @property {string} _id
 * @property {string} userRef
 * @property {string} campaignName
 * @property {string} shopId
 * @property {string} shopName
 * @property {string} flashsaleIdClone
 * @property {number} productCount
 * @property {number} timeFlashsaleBefore
 * @property {number} timeSchedulerBefore
 * @property {number} timeSlotStart
 * @property {number} timeSlotEnd
 * @property {string} timeCampaginStart
 * @property {string} timeCampaginEnd
 * @property {boolean} active
 * @property {string} timeCreate
 * @property {string} timeUpdate
 * @property {string} timeFetchLastest
 * @property {string} timeFetchNext
 * @property {string} createdAt
 * @property {string} updatedAt
 * @property {ListSet[]} listSet
 * @property {ListIndex[]} listIndex
 */
