package servicebuildermdl

import (
	"testing"

	"corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/loggermdl"

	dalmdl "corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/dalmdl/dao"

	"github.com/caibirdme/yql"
	"github.com/stretchr/testify/assert"
	"github.com/tidwall/gjson"
)

//Create Type with abstract Type
type MyBLLayer struct {
	AbstractBusinessLogicHolder
}

// attach methods to it
func (m *MyBLLayer) FindAndVerifyMobileNumber() map[string]interface{} {
	loginID := "noone"
	result1, ok := m.GetResult("daodata1")

	if !ok {
		loggermdl.LogError("error in convert")
	}

	loginID = result1.Get("#[mobileNo==\"7875383220\"].loginId").String()

	m.SetFinalData(loginID)

	return map[string]interface{}{
		"owner": loginID,
	}

}

//Now we will write DAO
func GetUsersInfo() *gjson.Result {
	return dalmdl.GetDAO().FilePath("../testingdata/users.json").IsCacheable(true).Query("*").Run()
}

func TestService(t *testing.T) {
	mb := MyBLLayer{}
	mb.Build()

	loaddata := func(ab *AbstractBusinessLogicHolder) {
		mb.ServiceData["daodata1"] = GetUsersInfo()
	}

	// finalStep := func(ab *AbstractBusinessLogicHolder) *interface{} {
	// 	s :=
	// 	return &s
	// }

	sb := GetSB("mysrv", &mb.AbstractBusinessLogicHolder).
		AddStep("Check Mobile", "owner in ('SystemIntegrator')", loaddata, mb.FindAndVerifyMobileNumber, mb.EchoBL).
		AddStep("Test STEP 2", "owner = 'SystemIntegrator'", nil, mb.FindAndVerifyMobileNumber, mb.EchoBL).
		Run().FinalOutput(nil)

	assert.Equal(t, "SystemIntegrator", *sb, "this should be same")
}

func TestYQL(t *testing.T) {
	a := map[string]interface{}{
		"owner": "a",
	}
	result, _ := yql.Match("owner ='a')", a)
	assert.Equal(t, true, result, "Yql should work")
}

func TestPanic(t *testing.T) {
	var a interface{}
	a = nil
	// a= nil

	_, ok := a.(string)
	assert.False(t, ok, "should panic")
	// assert.Equal(t, "something", s, "should be same")

}