package pipe

import (
	"github.com/go-redis/redis/v8"
)

/*
Redis ZAdd 向有序集合添加一个或多个成员，或者更新已存在成员的分数
*/
func (this *RedisPipe) ZAdd(key string, members ...*redis.Z) *redis.IntCmd {
	return this.client.ZAdd(this.ctx, key, members...)
}

/*
Redis Zcard 用于计算集合中元素的数量。
*/
func (this *RedisPipe) ZCard(key string) *redis.IntCmd {
	return this.client.ZCard(this.ctx, key)
}

/*
Redis ZCount 用于计算集合中指定的范围内的数量
*/
func (this *RedisPipe) ZCount(key string, min string, max string) *redis.IntCmd {
	return this.client.ZCount(this.ctx, key, min, max)
}

/*
Redis ZIncrBy 有序集合中对指定成员的分数加上增量 increment
*/
func (this *RedisPipe) ZIncrBy(key string, increment float64, member string) *redis.FloatCmd {
	return this.client.ZIncrBy(this.ctx, key, increment, member)
}

/*
Redis ZInterStore 计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 destination 中
*/
func (this *RedisPipe) ZInterStore(destination string, store *redis.ZStore) *redis.IntCmd {
	return this.client.ZInterStore(this.ctx, destination, store)
}

/*
Redis ZLexCount 在有序集合中计算指定字典区间内成员数量
*/
func (this *RedisPipe) ZLexCount(key string, min string, max string) *redis.IntCmd {
	return this.client.ZLexCount(this.ctx, key, min, max)
}

/*
Redis ZRange 通过索引区间返回有序集合指定区间内的成员
*/
func (this *RedisPipe) ZRange(key string, start int64, stop int64) *redis.StringSliceCmd {
	return this.client.ZRange(this.ctx, key, start, stop)
}

/*
Redis ZRangeByLex 通过字典区间返回有序集合的成员
*/
func (this *RedisPipe) ZRangeByLex(key string, opt *redis.ZRangeBy) *redis.StringSliceCmd {
	return this.client.ZRangeByLex(this.ctx, key, opt)
}

/*
Redis ZRangeByScore 通过分数返回有序集合指定区间内的成员
*/
func (this *RedisPipe) ZRangeByScore(key string, opt *redis.ZRangeBy) *redis.StringSliceCmd {
	return this.client.ZRangeByScore(this.ctx, key, opt)
}

/*
Redis ZRank 返回有序集合中指定成员的索引
*/
func (this *RedisPipe) ZRank(key string, member string) *redis.IntCmd {
	return this.client.ZRank(this.ctx, key, member)
}

/*
Redis ZRem 移除有序集合中的一个或多个成员
*/
func (this *RedisPipe) ZRem(key string, members ...interface{}) *redis.IntCmd {
	return this.client.ZRem(this.ctx, key, members...)
}

/*
Redis ZRemRangeByLex 移除有序集合中给定的字典区间的所有成员
*/
func (this *RedisPipe) ZRemRangeByLex(key string, min string, max string) *redis.IntCmd {
	return this.client.ZRemRangeByLex(this.ctx, key, min, max)
}

/*
Redis ZRemRangeByRank 移除有序集合中给定的排名区间的所有成员
*/
func (this *RedisPipe) ZRemRangeByRank(key string, start int64, stop int64) *redis.IntCmd {
	return this.client.ZRemRangeByRank(this.ctx, key, start, stop)
}

/*
Redis ZRemRangeByScore 移除有序集合中给定的分数区间的所有成员
*/
func (this *RedisPipe) ZRemRangeByScore(key string, min string, max string) *redis.IntCmd {
	return this.client.ZRemRangeByScore(this.ctx, key, min, max)
}

/*
Redis ZRevRange 返回有序集中指定区间内的成员，通过索引，分数从高到低 ZREVRANGE
*/
func (this *RedisPipe) ZRevRange(key string, start int64, stop int64) *redis.StringSliceCmd {
	return this.client.ZRevRange(this.ctx, key, start, stop)
}

/*
Redis ZRevRangeByScore 返回有序集中指定分数区间内的成员，分数从高到低排序
*/
func (this *RedisPipe) ZRevRangeByScore(key string, opt *redis.ZRangeBy) *redis.StringSliceCmd {
	return this.client.ZRevRangeByScore(this.ctx, key, opt)
}

/*
Redis ZRevRank 返回有序集中指定分数区间内的成员，分数从高到低排序
*/
func (this *RedisPipe) ZRevRank(key string, member string) *redis.IntCmd {
	return this.client.ZRevRank(this.ctx, key, member)
}

/*
Redis ZScore 返回有序集中指定分数区间内的成员，分数从高到低排序
*/
func (this *RedisPipe) ZScore(key string, member string) *redis.FloatCmd {
	return this.client.ZScore(this.ctx, key, member)
}

/*
Redis ZScore 返回有序集中指定分数区间内的成员，分数从高到低排序 ZUNIONSTORE
*/
func (this *RedisPipe) ZUnionStore(dest string, store *redis.ZStore) *redis.IntCmd {
	return this.client.ZUnionStore(this.ctx, dest, store)
}

/*
Redis ZScan 迭代有序集合中的元素（包括元素成员和元素分值）
*/
func (this *RedisPipe) ZScan(key string, _cursor uint64, match string, count int64) *redis.ScanCmd {
	return this.client.ZScan(this.ctx, key, _cursor, match, count)
}
