package service

import (
	"github.com/gogf/gf/util/gconv"
	"github.com/gomodule/redigo/redis"
	"go_sku_server/model"
	"go_sku_server/pkg/gredis"
	"go_sku_server/pkg/mongo"
	"gopkg.in/mgo.v2"
	"gopkg.in/mgo.v2/bson"
)

type SkuCacheService struct {

}
/**
mongoDB 根据 spuId supplierId moq encoded canal 获取sku信息
 */
func (spuCacheService *SkuCacheService) MongoGetOnlySkuInfo(spuId string,supplierId int,moq int,encoded int,canal string)(error, model.SkuMongo){

	var skuMongo model.SkuMongo
	mongodb := mongo.Conn("default")
	defer func() {
		mongodb.Close()
	}()
	query:=bson.M{
		"spu_id":gconv.Int64(spuId),
		"supplier_id":supplierId,
		"moq":moq,
		"encoded":encoded,
		"canal":canal,
	}
	err := mongodb.DB("ichunt").C("sku").Find(query).One(&skuMongo)
	if err != nil {
		if(err == mgo.ErrNotFound){
			return nil,skuMongo
		}
		return err,skuMongo
	}
	return  err,skuMongo
}

/**
mongo 插入sku
 */
func (spuCacheService *SkuCacheService) MongoInsertOnlySkuInfo(onlySkuInfo model.SkuMongo)(error){

	mongoConn := mongo.Conn("default");
	defer mongoConn.Close()
	Mongo:=mongoConn.DB("ichunt").C("sku")
	err:=Mongo.Insert(onlySkuInfo)
	return err
}


/**
  将单条sku数据压入redis
*/
func (spuCacheService *SkuCacheService)RedisInsertSkuInfo(skuId string,skuInfo string) error {

	redisWriteConn := gredis.Conn("search_w")
	defer redisWriteConn.Close()

	_,err:=redisWriteConn.Do("HSet","sku",skuId,skuInfo)
	return err;
}


/**
将skuID压入redis队列(list)(消费后将压入ES)
*/
func (spuCacheService *SkuCacheService)RedisPushEsList(skuId string) error {

	redisWriteConn := gredis.Conn("search_w")
	defer redisWriteConn.Close()
	push_name:="update_list_sku";
	_,err:=redisWriteConn.Do("Rpush",push_name,skuId)
	return err
}

/**
  获取sku redis单条信息
*/
func (spuCacheService *SkuCacheService)RedisGetSkuInfo(skuId string) (string,error) {

	redisReadConn := gredis.Conn("search_r")
	defer redisReadConn.Close()

	skuInfoString,err:=redis.String(redisReadConn.Do("Hget","sku",skuId))

	return skuInfoString,err

}