import { redirect, img, getToken } from '@/utils/common';
import { ref, reactive, computed, watch, onMounted, nextTick, getCurrentInstance } from 'vue';

/********************商品限购和商品起售********************/
export function useGoodsLimit() {
	
	/**
	 * 获取商品数量
	 * params 商品库存(stock)，是否开启限购（is_limit），限购类型（limit_type），限购数量（max_buy），起购（min_buy），已购买数量（has_buy） 
	 * return 商品数量，是否可以购买，原因
	***/
	const getGoodsNum = (params: any = {})=>{
		let {stock,is_limit,limit_type,max_buy,min_buy,has_buy,num} = params;
		
		let temp_range = {
			'up':{  num: 0, tips: '', is_stock: false }, // 上限
			'off':{ num: 0, tips: ''}  // 下限
		};
		
		let returnObj = {
			num: 0,
			max_num: 0,
			is_buy: true,
			tips: ''
		}
		
		/******************* 起售-start ************************/ 
		temp_range.off.num = min_buy > 0 ? min_buy : 1;
		if(min_buy){
			temp_range.off.tips = `该商品起购${params.min_buy}件`;
		}
		/******************* 起售-end ************************/ 
		
		
		/******************* 限购-start ************************/ 
		if(is_limit){
			returnObj.is_buy = true;
			if(max_buy){
				if(limit_type == 1){ //单次限购
					temp_range.up.num = max_buy;
					temp_range.up.tips = `该商品单次限购${max_buy}件`;
				}else{ // 单人限购
					let buyVal = params.max_buy - (params.has_buy||0);
					temp_range.up.num = buyVal > 0 ? buyVal : 0;
					temp_range.up.tips = `该商品单次限购${max_buy}件`;
					if(has_buy > 0){
						temp_range.up.tips += `,已购${has_buy}件`;
					}
				}
			
				if(temp_range.up.num > params.stock){
					temp_range.up.num = params.stock;
					temp_range.up.is_stock = true;
					temp_range.up.tips = "商品库存不足";
				}
			}
		}else{
			returnObj.is_buy = true;
			temp_range.up.num = stock;
			temp_range.up.tips = "商品库存不足";
		}
		/******************* 限购-end ************************/ 
		if(temp_range.off.num > temp_range.up.num && temp_range.up.is_stock){
			temp_range.up.tips = "商品库存不足";
		}else if(temp_range.off.num > temp_range.up.num){
			returnObj.num = temp_range.up.num;
		}else{
			if(num <= temp_range.off.num){
				returnObj.tips = temp_range.off.tips;
			}
		}
		return returnObj;
	}

    return {
		getGoodsNum
    }
}
