package main



import (
	"encoding/json"
	"fmt"
)
const TOKENJD  	  ="AbopJDAbopdu800820mcspcq=="
const TOKENBAIDU  ="AbopJDAbopdu800820mcspcq=="

const INTERFACEC1   = "GetSkuListByClass"
const INTERFACEID2    = "GetSkuListFull"
const INTERFACEID3    = "GetSkuListPrice"


var(
	jdToken=TOKENJD
	baiduToken=TOKENBAIDU

	GetSkuListByClass ="GetSkuListByClass"
	GetSkuListFull ="GetSkuListFull"
	GetSkuListPrice ="GetSkuListPrice"
	GetClassList ="GetClassList"
	GetSkuListImages = "GetSkuListImages"

	//redis 表key
	openWhiteList ="openWhiteList"//白名单
	openBlackList ="openBlackList"//白名单
	openTokenBusinessList="openTokenBusinessList"//商家列表
	openBusinessInterface="openBusinessInterface"//商家接口配置

	/**
		计数key
		比如 flowUse_AbopJDAbopdu800820mcspcq==_getSkuListById_min
		组成说明:flowUse_{token}_{interfaceName}_min 如果是天 后面就是day
	 */

	/**
	锁key
		比如 flow_lock_flowUse_AbopJDAbopdu800820mcspcq==_getSkuListById_min
	 	flow_lock_计数key
	 */
)


func main()  {

	generate()
}

func generate()  {
	//whiteIp()
	//businessList()
	businessInterfaceList()
	newWhiteBlack()
	newBusinessList()
}

//白名单配置
func whiteIp()  {
	redisKey:=openWhiteList
	/*whiteList:=[]string{
		"127.0.0.1",
		"127.0.0.2",
		"192.168.2.72",
		"::1",
		"192.168.2.241",
		"192.168.1.1",
		"192.168.2.129",
	}*/

	//线上配置
	whiteList:=[]string{
		"127.0.0.1",
		"::1",
		"119.123.78.115",
		"172.18.137.41",
		"172.18.137.42",
		"192.168.2.129",
		"19.123.78.115",
		"222.92.21.99",
		"192.168.2.72",
		"::1",
		"119.123.78.14",
	}

	/*whiteList:=[]string{
		"172.18.137.41",
		"::1",
	}*/


	fmt.Println("白名单配置:"+redisKey)
	redisStringSet(redisKey,whiteList)
}

//商家列表
func  businessList() {
	redisKey:=openTokenBusinessList

	businessList:=[]string{
		jdToken,//京东
		//baiduToken,//百度
	}
	
	fmt.Println("商家列表:key:"+redisKey)
	redisStringSet(redisKey,businessList)
}

func newBusinessList()  {

	config:=map[string]string{
		openTokenBusinessList:jdToken,
	}
	fmt.Println("新商家列表配置:")
	redisStringSadd(config)
}

func newWhiteBlack()  {
	jdWhiteList:=jdToken+"_"+openWhiteList
	jdBlackList:=jdToken+"_"+openBlackList
	//180.163.220.66
	config:=map[string]string{
		jdWhiteList:"192.168.2.72 222.92.21.99 192.168.2.129 ::1 119.123.79.225 119.123.78.14",

		jdBlackList:"::1 ",
	}
	fmt.Println("新白名单配置:")
	redisStringSadd(config)
}

//商家接口配置
func businessInterfaceList()  {
	redisKey:=openBusinessInterface
	config:=map[string]interface{}{
		//获取sku列表(获取价格相关字段) 5,10000000
		//获取sku列表(根据class_id查询) 500,10000000
		//获取sku列表(full-显示所有字段) 50,10000000
		jdToken+"_"+GetSkuListByClass: map[string]interface{}{
			"dayMaxNum":1000000,
			"minMaxNum":300,
			"totalMaxNum":10000,
		},
		jdToken+"_"+GetSkuListFull: map[string]interface{}{
			"dayMaxNum":1000000,
			"minMaxNum":300,
			"totalMaxNum":10000,
		},
		jdToken+"_"+GetSkuListPrice: map[string]interface{}{
			"dayMaxNum":1000000,
			"minMaxNum":300,
			"totalMaxNum":10000,
		},
		jdToken+"_"+GetClassList: map[string]interface{}{
			"dayMaxNum":1000000,
			"minMaxNum":300,
			"totalMaxNum":10000,
		},
		jdToken+"_"+GetSkuListImages: map[string]interface{}{
			"dayMaxNum":1000000,
			"minMaxNum":300,
			"totalMaxNum":10000,
		},




		/*baiduToken+"_"+getSkuListByClass: map[string]interface{}{
			"dayMaxNum":100,
			"minMaxNum":500,
			"totalMaxNum":10000,
		},*/
	}
	fmt.Println("商家接口配置:key:"+openBusinessInterface)
	redisHashSet(redisKey,config)
}




func redisHashSet(key string,values map[string]interface{})  {
	for hashk,valueOne:=range values{
		b,_:=json.Marshal(valueOne)
		b,_=json.Marshal(string(b))
		hsetStr:="Hset "+key+" "+string(hashk)+" "+string(b)
		fmt.Println(hsetStr)
		//fmt.Println("对应计时的min key\nflowUse_"+hashk+"_min")
		//fmt.Println("对应计时的day key\nflowUse_"+hashk+"_day")
	}
}

func redisStringSet(key string,sliceString []string)  {
	b,_:=json.Marshal(sliceString)
	b,_=json.Marshal(string(b))
	setStr:="set "+key+" "+string(b)
	fmt.Println(setStr)
}

func redisStringSadd(config map[string]string)  {
	for hashk,valueOne:=range config{
		SaddStr:="SADD "+hashk+" "+valueOne
		fmt.Println(SaddStr)
		//fmt.Println("对应计时的min key\nflowUse_"+hashk+"_min")
		//fmt.Println("对应计时的day key\nflowUse_"+hashk+"_day")
	}
}