package redis

import (
	"fmt"
	"github.com/gomodule/redigo/redis"
	"github.com/spf13/viper"
	"math/rand"
	"strconv"
	"testing"
)

func TestRedisRepository(t *testing.T) {
	r := NewTestRepository()
	for i := 0; i < 10; i++ {
		err := r.Save2("test", []byte(strconv.Itoa(rand.Intn(100))), 0)
		if nil != err {
			println("Redis error:", err)
		}
	}
}

// Redis操作类示例
type TestRepository struct {
	hub *Hub
}

func NewTestRepository() *TestRepository {
	viper.SetDefault("redis.host", "127.0.0.1:6379")
	hub := NewHub()
	return &TestRepository{hub: hub}
}

func (r *TestRepository) Save2(key string, value []byte, expire int) error {
	var err error
	var reply string
	if expire > 0 {
		reply, err = redis.String(r.hub.Do("SET", key, value, expire))
	} else {
		reply, err = redis.String(r.hub.Do("SET", key, value))
	}

	if nil != err {
		return err
	} else if reply != "" {
		println(reply)
	}
	return nil
}

func (r *TestRepository) Save(key string, value []byte) error {
	fmt.Printf("input: %s\n", string(value))

	var err error
	var i interface{}
	i, err = r.hub.Do("SET", key, value)
	if nil != err {
		fmt.Printf("%T\n", err)
		return err
	}
	fmt.Printf("%T\n", i)
	println(fmt.Sprintf("%s", i))
	return nil
}

func (r *TestRepository) Test(key string, value []byte) error {
	i, err := r.hub.Do("HSET", key, []byte("code"), value)
	if nil != err {
		fmt.Printf("%T\n", err)
		return err
	}
	fmt.Printf("%T\n", i)
	println(fmt.Sprintf("%d", i))
	return nil
}