package wallet

import (
	"io/ioutil"
	"testing"

	"github.com/stretchr/testify/require"

	"github.com/ethereum/go-ethereum/event"

	"github.com/status-im/status-go/appdatabase"
	"github.com/status-im/status-go/multiaccounts/accounts"
	"github.com/status-im/status-go/params"
	"github.com/status-im/status-go/rpc"
	"github.com/status-im/status-go/rpc/network"
	"github.com/status-im/status-go/t/helpers"
	"github.com/status-im/status-go/walletdatabase"
)

func TestKeycardPairingsFile(t *testing.T) {
	appDB, err := helpers.SetupTestMemorySQLDB(appdatabase.DbInitializer{})
	require.NoError(t, err)

	accountsDb, err := accounts.NewDB(appDB)
	require.NoError(t, err)

	db, err := helpers.SetupTestMemorySQLDB(walletdatabase.DbInitializer{})
	require.NoError(t, err)

	accountFeed := &event.Feed{}

	service := NewService(db, accountsDb, appDB, &rpc.Client{NetworkManager: network.NewManager(db)}, accountFeed, nil, nil, nil, &params.NodeConfig{}, nil, nil, nil, nil, nil, "")

	data, err := service.KeycardPairings().GetPairingsJSONFileContent()
	require.NoError(t, err)
	require.Equal(t, 0, len(data))

	pairingsFile, err := ioutil.TempFile("", "keycard-pairings.json")
	require.NoError(t, err)
	defer pairingsFile.Close()

	service.KeycardPairings().SetKeycardPairingsFile(pairingsFile.Name())

	dataToStore := []byte(`
	{"2b907a26ee4319ab50d7eda44b525f6a":{"key":"cc9d96f9b65b551595f3cf7c531beacda24b4937cece7fef70f5236ee80a0808","index":0},
	"4abcc337a3dfc7e89785c427ef32983b":{"key":"3543288f50b2c0bbb2745ffd7107bc3acd105197b97384342fe864e7391a7af7","index":3},
	"4b2e0fe09f997d7ce20320c971ad54df":{"key":"843edb10045d329f4ecfac73fe66f13deb7b2b685dd54a4b2d2d700d19062391","index":0},
	"7ce8e7456eb9025a97f3579490246cae":{"key":"b12a89ca66288f4239a2b58c2bb533df2694b613eb73fc55b72391497627766f","index":1}}
	`)

	err = service.KeycardPairings().SetPairingsJSONFileContent(dataToStore)
	require.NoError(t, err)

	data, err = service.KeycardPairings().GetPairingsJSONFileContent()
	require.NoError(t, err)
	require.Equal(t, len(dataToStore), len(data))
}