package main

import (
	"C"
	"fmt"
	"time"

	"github.com/yitter/idgenerator-go/regworkerid"
)

func main() {
	ip := "localhost"
	password := ""

	ipChar := C.CString(ip)
	passChar := C.CString(password)

	workerIdList := RegisterMany(ipChar, 6379, passChar, 4, 3, 0)
	for _, value := range workerIdList {
		fmt.Println("注册的WorkerId:", value)
	}

	id := RegisterOne(ipChar, 6379, passChar, 4, 0)
	fmt.Println("注册的WorkerId:", id)

	// var workerId = regworkerid.RegisterOne(ip, 6379, "", 4)
	// fmt.Println("注册的WorkerId:", workerId)

	fmt.Println("end")
	time.Sleep(time.Duration(300) * time.Second)
}

//export RegisterOne
// 注册一个 WorkerId
func RegisterOne(ip *C.char, port int32, password *C.char, maxWorkerId int32, database int) int32 {
	return regworkerid.RegisterOne(C.GoString(ip), port, C.GoString(password), maxWorkerId, database)
}

//export UnRegister
// 注销本机已注册的 WorkerId
func UnRegister() {
	regworkerid.UnRegister()
}

// export Validate
// 检查本地WorkerId是否有效（0-有效，其它-无效）
func Validate(workerId int32) int32 {
	return regworkerid.Validate(workerId)
}

// RegisterMany
// 注册多个 WorkerId，会先注销所有本机已注册的记录
func RegisterMany(ip *C.char, port int32, password *C.char, maxWorkerId, totalCount int32, database int) []int32 {
	// return (*C.int)(unsafe.Pointer(&values))
	//return regworkerid.RegisterMany(ip, port, password, maxWorkerId, totalCount, database)
	return regworkerid.RegisterMany(C.GoString(ip), port, C.GoString(password), maxWorkerId, totalCount, database)
}

// To Build a dll/so：

// windows:
// go build -o ./target/yitidgengo.dll -buildmode=c-shared main.go
// // go build -o ./target/yitidgengo.dll -buildmode=c-shared main.go reg.go

// linux init: go install -buildmode=shared -linkshared std
// go build -o ./target/yitidgengo.so -buildmode=c-shared main.go
// go build -o ./target/yitidgengo.so -buildmode=c-shared main.go reg.go

// https://books.studygolang.com/advanced-go-programming-book/ch2-cgo/ch2-09-static-shared-lib.html
