package build

import (
	"bytes"
	"compress/gzip"
	"embed"
	"encoding/json"

	apitypes "github.com/filecoin-project/lotus/api/types"
)

//go:embed openrpc
var openrpcfs embed.FS

func mustReadGzippedOpenRPCDocument(data []byte) apitypes.OpenRPCDocument {
	zr, err := gzip.NewReader(bytes.NewBuffer(data))
	if err != nil {
		log.Fatal(err)
	}
	m := apitypes.OpenRPCDocument{}
	err = json.NewDecoder(zr).Decode(&m)
	if err != nil {
		log.Fatal(err)
	}
	err = zr.Close()
	if err != nil {
		log.Fatal(err)
	}
	return m
}

func OpenRPCDiscoverJSON_Full() apitypes.OpenRPCDocument {
	data, err := openrpcfs.ReadFile("openrpc/full.json.gz")
	if err != nil {
		panic(err)
	}
	return mustReadGzippedOpenRPCDocument(data)
}

func OpenRPCDiscoverJSON_Miner() apitypes.OpenRPCDocument {
	data, err := openrpcfs.ReadFile("openrpc/miner.json.gz")
	if err != nil {
		panic(err)
	}
	return mustReadGzippedOpenRPCDocument(data)
}

func OpenRPCDiscoverJSON_Worker() apitypes.OpenRPCDocument {
	data, err := openrpcfs.ReadFile("openrpc/worker.json.gz")
	if err != nil {
		panic(err)
	}
	return mustReadGzippedOpenRPCDocument(data)
}

func OpenRPCDiscoverJSON_Gateway() apitypes.OpenRPCDocument {
	data, err := openrpcfs.ReadFile("openrpc/gateway.json.gz")
	if err != nil {
		panic(err)
	}
	return mustReadGzippedOpenRPCDocument(data)
}
