package jd

// 这里函数取得的信息，除了与自身实体相关的ID（比如PARENT ID），都已经转换成了本地ID了

// type tSkuInfoExt struct {
// 	model.SkuName
// 	JdCatID      int64  `orm:"column(jd_cat_id)"`      // 商家类别
// 	JdCategoryID int    `orm:"column(jd_category_id)"` // 到家类别
// 	SkuCatID     int64  `orm:"column(sku_cat_id)"`     // 商家特殊类别
// 	Comment      string `orm:"size(255)" json:"comment"`
// }

// var (
// 	skuAddParamsKeyMap = map[string]int{
// 		jdapi.KeyUpcCode: 1,
// 	}
// )

// func (p *PurchaseHandler) CreateCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) (err error) {
// 	var jdPid int64
// 	if cat.ParentID != 0 {
// 		pCat := &model.SkuCategory{}
// 		pCat.ID = cat.ParentID
// 		if err = dao.GetEntity(db, pCat); err == nil {
// 			jdPid = pCat.JdID
// 		} else {
// 			return err
// 		}
// 	}
// 	if globals.EnableJdStoreWrite {
// 		result, err2 := getAPI("").AddShopCategory(jdPid, cat.Name, int(cat.Level), cat.Seq, userName)
// 		if err = err2; err == nil {
// 			if jdID := utils.Str2Int64WithDefault(result, 0); jdID != 0 {
// 				cat.JdID = jdID
// 			}
// 		}
// 	} else {
// 		cat.JdID = jxutils.GenFakeID()
// 	}
// 	return err
// }

// func (p *PurchaseHandler) UpdateCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) error {
// 	if globals.EnableJdStoreWrite {
// 		return getAPI("").UpdateShopCategory(cat.JdID, cat.Name)
// 	}
// 	return nil
// }

// func (p *PurchaseHandler) DeleteCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) error {
// 	if globals.EnableJdStoreWrite {
// 		return getAPI("").DelShopCategory(cat.JdID)
// 	}
// 	return nil
// }

// func (p *PurchaseHandler) ReorderCategories(db *dao.DaoDB, parentCatID int, userName string) (err error) {
// 	var parentJDID int64
// 	if parentCatID != 0 {
// 		cat := &model.SkuCategory{}
// 		cat.ID = parentCatID
// 		if err = dao.GetEntity(db, cat); err != nil {
// 			return err
// 		}
// 		parentJDID = cat.JdID
// 	}
// 	var cats []*model.SkuCategory
// 	if err = dao.GetRows(db, &cats, `
// 	SELECT *
// 	FROM sku_category
// 	WHERE parent_id = ? AND deleted_at = ?
// 	ORDER BY seq`, parentCatID, utils.DefaultTimeValue); err == nil {
// 		jdCatIDs := make([]int64, len(cats))
// 		for k, v := range cats {
// 			jdCatIDs[k] = v.JdID
// 		}
// 		if globals.EnableJdStoreWrite {
// 			err = getAPI("").ChangeShopCategoryOrder(parentJDID, jdCatIDs)
// 		}
// 	}
// 	return err
// }

// func (p *PurchaseHandler) cuSku(db *dao.DaoDB, sku *model.Sku, handler func(skuExt *tSkuInfoExt, price int, skuName string, shopCategories []int64, addParams map[string]interface{}) (string, error)) (err error) {
// 	var skuInfoExt tSkuInfoExt
// 	err = dao.GetRow(nil, &skuInfoExt, `
// 	SELECT
// 	t2.*, IF(t2.jd_category_id > 0, t2.jd_category_id, t3.jd_category_id) jd_category_id,
// 	t3.jd_id jd_cat_id,
// 	t4.jd_id sku_cat_id
// 	FROM sku t1
// 	JOIN sku_name t2 ON t1.name_id = t2.id
// 	JOIN sku_category t3 ON t2.category_id = t3.id
// 	LEFT JOIN sku_category t4 ON t1.category_id = t4.id
// 	WHERE t1.id = ?
// 	`, sku.ID)
// 	if err == nil {
// 		shopCategories := []int64{skuInfoExt.JdCatID}
// 		// SPU只支持SPU的商家分类，不支持单独SKU的，去除SKU的分类
// 		// if skuInfoExt.SkuCatID != 0 {
// 		// 	shopCategories = append(shopCategories, skuInfoExt.SkuCatID)
// 		// }
// 		if skuInfoExt.JdCategoryID == 0 {
// 			skuInfoExt.JdCategoryID = getDefJdCategoryID()
// 		}
// 		if skuInfoExt.BrandID == 0 {
// 			skuInfoExt.BrandID = DefBrandID
// 		}
// 		addParams := map[string]interface{}{}

// 		if skuInfoExt.IsGlobal == 0 { //如果不是全国可售，要查可售区域
// 			sellPlaces, err2 := dao.GetSellCities(db, skuInfoExt.ID, model.VendorIDJD)
// 			if err = err2; err == nil && len(sellPlaces) > 0 {
// 				sellCites := make([]int, len(sellPlaces))
// 				for k, v := range sellPlaces {
// 					sellCites[k] = v.JdCode
// 				}
// 				addParams["sellCities"] = sellCites
// 			}
// 		}
// 		if addParams["sellCities"] == nil {
// 			addParams["sellCities"] = []int{0}
// 		}
// 		if skuInfoExt.DescImg != "" {
// 			addParams[jdapi.KeyProductDesc] = fmt.Sprintf(`<img src="%s"  alt="一张图片" />`, skuInfoExt.DescImg)
// 			addParams[jdapi.KeyIfViewDesc] = 0
// 		} else {
// 			addParams[jdapi.KeyIfViewDesc] = 1
// 		}
// 		if err == nil {
// 			skuName := jxutils.ComposeSkuName(skuInfoExt.Prefix, skuInfoExt.Name, sku.Comment, skuInfoExt.Unit, sku.SpecQuality, sku.SpecUnit, jdapi.MaxSkuNameCharCount)
// 			skuPrice := jxutils.CaculateSkuPrice(skuInfoExt.Price, sku.SpecQuality, sku.SpecUnit, skuInfoExt.Unit)
// 			if skuInfoExt.Upc != "" {
// 				addParams[jdapi.KeyUpcCode] = skuInfoExt.Upc
// 			}
// 			result, err2 := handler(&skuInfoExt, skuPrice, skuName, shopCategories, addParams)
// 			if err = err2; err == nil {
// 				if jdID := utils.Str2Int64WithDefault(result, 0); jdID != 0 {
// 					sku.JdID = jdID
// 				}
// 			}
// 		}
// 	}
// 	return err
// }

// func (p *PurchaseHandler) CreateSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) {
// 	return p.cuSku(db, sku, func(skuExt *tSkuInfoExt, price int, skuName string, shopCategories []int64, addParams map[string]interface{}) (vendorSkuID string, err error) {
// 		if skuExt.IsSpu == 0 {
// 			if globals.EnableJdStoreWrite {
// 				vendorSkuID, err = getAPI("").AddSku(utils.Int2Str(sku.ID), skuExt.JdCategoryID, shopCategories, skuExt.BrandID, skuName, price, jxutils.IntWeight2Float(sku.Weight), jxutils.BatchString2Slice(skuExt.Img, skuExt.Img2), jxStatus2jdStatus(sku.Status), true, addParams)
// 				if err != nil {
// 					if jdSkuID := jdapi.GetJdSkuIDFromError(err); jdSkuID > 0 {
// 						vendorSkuID = utils.Int64ToStr(jdSkuID)
// 						err = nil
// 					}
// 				}
// 			} else {
// 				vendorSkuID = utils.Int64ToStr(jxutils.GenFakeID())
// 			}
// 		} else {
// 			vendorSkuID, err = p.syncSkuNameAsSpu(db, sku, skuExt, price, skuName, shopCategories, addParams)
// 		}
// 		return vendorSkuID, err
// 	})
// }

// // func (p *PurchaseHandler) ReadSku(ctx *jxcontext.Context, vendorOrgCode, vendorSkuID string) (skuNameExt *model.SkuNameExt, err error) {
// // 	jdSkuID := utils.Str2Int64(vendorSkuID)
// // 	a := getAPI(vendorOrgCode)
// // 	skuList, _, err := a.QuerySkuInfos(&jdapi.QuerySkuParam{
// // 		SkuID: jdSkuID,
// // 	})
// // 	if err == nil {
// // 		if len(skuList) >= 1 {
// // 			skuNameExt = &model.SkuNameExt{}
// // 			if imgList, err2 := a.QueryListBySkuIds(&jdapi.QueryListBySkuIdsParam{
// // 				SkuIDs: []int64{jdSkuID},
// // 			}); err2 == nil && len(imgList) > 0 {
// // 				skuNameExt.Img = imgList[0].SourceImgURL
// // 			}
// // 			sku := skuList[0]
// // 			prefix, name, comment, specUnit, unit, specQuality := jxutils.SplitSkuName(sku.SkuName)
// // 			if name == "" {
// // 				name = sku.SkuName
// // 				unit = "份"
// // 				specUnit = "g"
// // 			}
// // 			skuNameExt.Prefix = prefix
// // 			skuNameExt.Name = name
// // 			skuNameExt.Unit = unit
// // 			skuNameExt.Price = sku.SkuPrice
// // 			skuNameExt.Skus = []*model.SkuWithVendor{
// // 				&model.SkuWithVendor{
// // 					Sku: &model.Sku{
// // 						SpecQuality: specQuality,
// // 						SpecUnit:    specUnit,
// // 						Weight:      jxutils.FloatWeight2Int(float32(sku.Weight)),
// // 						JdID:        sku.SkuID,
// // 						Status:      jdStatus2jxStatus(sku.FixedStatus),
// // 						Comment:     comment,
// // 					},
// // 				},
// // 			}
// // 			skuNameExt.Skus[0].ID = int(utils.Str2Int64(sku.OutSkuID))

// // 			db := dao.GetDB()
// // 			shopCategories := sku.ShopCategories
// // 			if len(shopCategories) > 0 {
// // 				skuCat := &model.SkuCategory{}
// // 				skuCat.JdID = shopCategories[0]
// // 				if dao.GetEntity(db, skuCat, "JdID") == nil {
// // 					skuNameExt.CategoryID = skuCat.ID
// // 				}
// // 			}
// // 			sellCities := sku.SellCities
// // 			for _, v := range sellCities {
// // 				if v == 0 {
// // 					skuNameExt.IsGlobal = 1
// // 				}
// // 			}
// // 			if len(sellCities) == 0 || skuNameExt.IsGlobal == 1 {
// // 				skuNameExt.IsGlobal = 1
// // 			} else {
// // 				var places []*model.Place
// // 				if err = dao.GetRows(db, &places, "SELECT * FROM place WHERE jd_code IN ("+dao.GenQuestionMarks(len(sellCities))+") AND level = 2", sellCities); err == nil {
// // 					skuNameExt.Places = make([]int, len(places))
// // 					for k, v := range places {
// // 						skuNameExt.Places[k] = v.Code
// // 					}
// // 				}
// // 			}
// // 		} else {
// // 			err = partner.ErrCanNotFindItem
// // 		}
// // 	}
// // 	return skuNameExt, err
// // }

// func (p *PurchaseHandler) UpdateSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) {
// 	return p.cuSku(db, sku, func(skuExt *tSkuInfoExt, price int, skuName string, shopCategories []int64, addParams map[string]interface{}) (vendorSkuID string, err error) {
// 		params := utils.MergeMaps(addParams)
// 		params[jdapi.KeyCategoryId] = skuExt.JdCategoryID
// 		params[jdapi.KeyShopCategories] = shopCategories
// 		params[jdapi.KeyBrandId] = skuExt.BrandID
// 		params[jdapi.KeySkuName] = skuName
// 		params[jdapi.KeyWeight] = jxutils.IntWeight2Float(sku.Weight)
// 		params[jdapi.KeyImages] = jxutils.BatchString2Slice(skuExt.Img, skuExt.Img2)
// 		params[jdapi.KeyFixedStatus] = jxStatus2jdStatus(sku.Status)
// 		if skuExt.IsSpu == 0 {
// 			if globals.EnableJdStoreWrite {
// 				vendorSkuID, err = getAPI("").UpdateSku(utils.Int2Str(sku.ID), params)
// 			}
// 		} else {
// 			vendorSkuID, err = p.syncSkuNameAsSpu(db, sku, skuExt, price, skuName, shopCategories, addParams)
// 		}
// 		return vendorSkuID, err
// 	})
// }

// func (p *PurchaseHandler) DeleteSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) {
// 	params := map[string]interface{}{
// 		jdapi.KeyFixedStatus: jdapi.SkuFixedStatusDeleted,
// 	}
// 	sql := `
// 	SELECT t2.*
// 	FROM sku t1
// 	JOIN sku_name t2 ON t1.name_id = t2.id
// 	WHERE t1.id = ?
// 	`
// 	var skuExt tSkuInfoExt
// 	err = dao.GetRow(db, &skuExt, sql, sku.ID)
// 	if err == nil {
// 		if skuExt.IsSpu == 0 {
// 			if globals.EnableJdStoreWrite {
// 				_, err = getAPI("").UpdateSku(utils.Int2Str(sku.ID), params)
// 			}
// 		} else {
// 			_, err = p.syncSkuNameAsSpu(db, sku, &skuExt, 0, "", nil, nil)
// 		}
// 	}
// 	return err
// }

// // func (p *PurchaseHandler) RefreshAllSkusID(ctx *jxcontext.Context, parentTask tasksch.ITask, isAsync bool) (hint string, err error) {

// // 	db := dao.GetDB()
// // 	var skuPairs []*jdapi.SkuIDPair
// // 	const stepCount = 2

// // 	rootTask := tasksch.NewSeqTask("jd RefreshAllSkusID", ctx,
// // 		func(rootTask *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
// // 			switch step {
// // 			case 0:
// // 				err = dao.GetRows(db, &skuPairs, `
// // 			SELECT t1.id out_sku_id, t1.jd_id sku_id
// // 			FROM sku t1
// // 			WHERE t1.deleted_at = ?
// // 			`, utils.DefaultTimeValue)
// // 			default:
// // 				taskName := "RefreshAllSkusID update id"
// // 				if step != stepCount-1 {
// // 					taskName = "RefreshAllSkusID update uuid"
// // 				}
// // 				task1 := tasksch.NewParallelTask(taskName, tasksch.NewParallelConfig().SetIsContinueWhenError(true).SetBatchSize(jdapi.MaxBatchSize4BatchUpdateOutSkuId), ctx,
// // 					func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
// // 						skuPairs := make([]*jdapi.SkuIDPair, len(batchItemList))
// // 						for k, v := range batchItemList {
// // 							pair := v.(*jdapi.SkuIDPair)
// // 							skuPairs[k] = &jdapi.SkuIDPair{
// // 								SkuId:    pair.SkuId,
// // 								OutSkuId: pair.OutSkuId,
// // 							}
// // 							if step != stepCount-1 {
// // 								skuPairs[k].OutSkuId = utils.GetUUID()
// // 							}
// // 						}
// // 						if globals.EnableJdStoreWrite {
// // 							_, err = getAPI("").BatchUpdateOutSkuId(skuPairs)
// // 						}
// // 						return nil, err
// // 					}, skuPairs)
// // 				rootTask.AddChild(task1).Run()
// // 				_, err = task1.GetResult(0)
// // 			}
// // 			return nil, err
// // 		}, stepCount)
// // 	tasksch.HandleTask(rootTask, parentTask, false).Run()
// // 	if !isAsync {
// // 		_, err = rootTask.GetResult(0)
// // 	}
// // 	return rootTask.ID, err
// // }

// func splitAddParams(addParams map[string]interface{}) (spuAddParams, skuAddParams map[string]interface{}) {
// 	if addParams != nil {
// 		spuAddParams = make(map[string]interface{})
// 		skuAddParams = make(map[string]interface{})
// 		for key := range addParams {
// 			if skuAddParamsKeyMap[key] == 1 {
// 				skuAddParams[key] = addParams[key]
// 			} else {
// 				spuAddParams[key] = addParams[key]
// 			}
// 		}
// 	}
// 	return spuAddParams, skuAddParams
// }

// // 这个处理JD SPU，补丁形式
// func (p *PurchaseHandler) syncSkuNameAsSpu(db *dao.DaoDB, sku *model.Sku, skuExt *tSkuInfoExt, price int, skuName string, shopCategories []int64, addParams map[string]interface{}) (vendorSkuID string, err error) {
// 	// SPU的SKU NAME不需要规格信息
// 	skuName = jxutils.ComposeSkuName(skuExt.Prefix, skuExt.Name, sku.Comment, "", 0, "", 0)
// 	skuNameJdID := skuExt.JdID
// 	spuAddParams, skuAddParams := splitAddParams(addParams)
// 	if !jxutils.IsEmptyID(skuNameJdID) && sku.JdSyncStatus&model.SyncFlagDeletedMask != 0 { // 删除SKU
// 		if globals.EnableJdStoreWrite {
// 			err = getAPI("").UpdateSkuBaseInfo(utils.Int2Str(skuExt.ID), utils.Int2Str(sku.ID), utils.Params2Map(jdapi.KeyFixedStatus, jdapi.SkuFixedStatusDeleted))
// 		}
// 	}
// 	if err == nil {
// 		updateFields := []string{}
// 		if skuExt.JdSyncStatus&model.SyncFlagDeletedMask != 0 {
// 			sql := `
// 			SELECT COUNT(*) ct
// 			FROM sku t1
// 			WHERE t1.name_id = ? AND (t1.status <> ? OR t1.jd_sync_status <> 0)
// 			`
// 			var count struct {
// 				Ct int
// 			}
// 			if err = dao.GetRow(db, &count, sql, sku.NameID, model.SkuStatusDeleted); err != nil {
// 				return "", err
// 			}
// 			if count.Ct <= 1 && sku.JdSyncStatus&model.SyncFlagDeletedMask != 0 { // 1就是最后删的那个
// 				updateFields = append(updateFields, model.FieldJdSyncStatus)
// 				if globals.EnableJdStoreWrite {
// 					if err = getAPI("").UpdateSpu(utils.Int2Str(skuExt.ID), utils.Params2Map(jdapi.KeyFixedStatus, jdapi.SkuFixedStatusOffline)); err == nil {
// 						err = getAPI("").UpdateSpu(utils.Int2Str(skuExt.ID), utils.Params2Map(jdapi.KeyFixedStatus, jdapi.SkuFixedStatusDeleted))
// 					}
// 				}
// 			}
// 		} else if skuExt.JdSyncStatus&model.SyncFlagNewMask != 0 && jxutils.IsEmptyID(skuNameJdID) {
// 			if globals.EnableJdStoreWrite {
// 				spuName := jxutils.ComposeSpuName(skuExt.Prefix, skuExt.Name, 0)
// 				skus := []map[string]interface{}{
// 					map[string]interface{}{
// 						jdapi.KeyOutSkuId:     utils.Int2Str(sku.ID),
// 						jdapi.KeySkuName:      skuName,
// 						jdapi.KeyFixedStatus:  jxStatus2jdStatus(sku.Status),
// 						jdapi.KeySkuPrice:     price,
// 						jdapi.KeyWeight:       jxutils.IntWeight2Float(sku.Weight),
// 						jdapi.KeyIsSale:       true,
// 						jdapi.FakeKeySpecAttr: composeSkuSpec(sku.SpecQuality, sku.SpecUnit, skuExt.Unit),
// 					},
// 				}
// 				skus[0] = utils.MergeMaps(skus[0], skuAddParams)
// 				updateFields = append(updateFields, model.FieldJdSyncStatus)
// 				if globals.EnableJdStoreWrite {
// 					vendorSpuID, skuPairs, err2 := getAPI("").AddSpu(utils.Int2Str(skuExt.ID), skuExt.JdCategoryID, shopCategories, skuExt.BrandID, spuName, []string{skuExt.Img}, jxStatus2jdStatus(skuExt.Status), spuAddParams, skus)
// 					if err = err2; err == nil {
// 						skuExt.JdID = vendorSpuID
// 						// skuNameJdID = skuExt.JdID // 这个是故意去掉的，这样之后的首次SKU修改操作就会被忽略，下一条语句也就可以不用了
// 						// sku.JdSyncStatus &= ^model.SyncFlagNewMask
// 						vendorSkuID = utils.Int64ToStr(skuPairs[0].SkuId)
// 						updateFields = append(updateFields, model.FieldJdID)
// 					}
// 				}
// 			}
// 		} else if skuExt.JdSyncStatus&model.SyncFlagModifiedMask != 0 {
// 			params := utils.MergeMaps(map[string]interface{}{
// 				jdapi.KeySpuName:        jxutils.ComposeSpuName(skuExt.Prefix, skuExt.Name, 0),
// 				jdapi.KeyShopCategories: shopCategories,
// 				jdapi.KeyCategoryId:     skuExt.JdCategoryID,
// 				jdapi.KeyBrandId:        skuExt.BrandID,
// 				jdapi.KeyImages:         []string{skuExt.Img},
// 				jdapi.KeyFixedStatus:    jxStatus2jdStatus(skuExt.Status),
// 			}, spuAddParams)
// 			updateFields = append(updateFields, model.FieldJdSyncStatus)
// 			if globals.EnableJdStoreWrite {
// 				err = getAPI("").UpdateSpu(utils.Int2Str(skuExt.ID), params)
// 			}
// 		}
// 		if err == nil {
// 			if skuExt.JdSyncStatus != 0 && len(updateFields) > 0 {
// 				skuExt.JdSyncStatus = 0
// 				_, err = dao.UpdateEntity(db, &skuExt.SkuName, updateFields...)
// 			}
// 		}
// 	}
// 	if err == nil && !jxutils.IsEmptyID(skuNameJdID) {
// 		if sku.JdSyncStatus&model.SyncFlagNewMask != 0 { // 非首次新增SKU
// 			if globals.EnableJdStoreWrite {
// 				vendorSkuID2, err2 := getAPI("").AppendSku(utils.Int2Str(skuExt.ID), utils.Int2Str(sku.ID), skuName, price, jxutils.IntWeight2Float(sku.Weight), []string{skuExt.Img}, jxStatus2jdStatus(sku.Status), true, composeSkuSpec(sku.SpecQuality, sku.SpecUnit, skuExt.Unit), skuAddParams)
// 				if err = err2; err == nil {
// 					vendorSkuID = utils.Int64ToStr(vendorSkuID2)
// 				}
// 			}
// 		} else if sku.JdSyncStatus&model.SyncFlagModifiedMask != 0 {
// 			params := make(map[string]interface{})
// 			params[jdapi.KeySkuName] = skuName
// 			params[jdapi.KeyImages] = []string{skuExt.Img}
// 			params[jdapi.KeyFixedStatus] = jxStatus2jdStatus(sku.Status)
// 			params[jdapi.KeyWeight] = jxutils.IntWeight2Float(sku.Weight)
// 			params[jdapi.KeySkuPrice] = price
// 			if globals.EnableJdStoreWrite {
// 				err = getAPI("").UpdateSkuBaseInfo(utils.Int2Str(skuExt.ID), utils.Int2Str(sku.ID), utils.MergeMaps(params, skuAddParams))
// 				if sku.JdSyncStatus&model.SyncFlagSpecMask != 0 {
// 					skuIndex := sku.SkuIndex
// 					if skuIndex > 0 {
// 						saleAttrValue := composeSkuSpec(sku.SpecQuality, sku.SpecUnit, skuExt.Unit)
// 						err = getAPI("").UpdateSpuSaleAttr(utils.Int2Str(skuExt.ID), utils.Int2Str(jdapi.SaleAttrIDBase), "", utils.Int2Str(jdapi.SaleAttrValueIDBase+skuIndex-1), saleAttrValue)
// 					}
// 				}
// 			}
// 		}
// 		if err == nil {
// 			sku.JdSyncStatus = 0
// 		}
// 	}
// 	return vendorSkuID, err
// }

// func composeSkuSpec(specQuality float32, specUnit, unit string) string {
// 	prefix := ""
// 	if unit == model.SpecialUnit {
// 		prefix = "约"
// 	}
// 	value := prefix + jxutils.ComposeSkuSpec(specQuality, specUnit)
// 	suffix := "/" + unit
// 	if utf8.RuneCountInString(value) <= 8-utf8.RuneCountInString(suffix) {
// 		value += suffix
// 	}
// 	return value
// }
