package test

import (
	"database/sql"
	"fmt"
	"testing"

	_ "github.com/go-sql-driver/mysql"
	"github.com/pingcap/tispector/service/checker"
	"github.com/pingcap/tispector/service/db_info"
	task "github.com/pingcap/tispector/service/task"
)

func TestListRule(t *testing.T) {
	SQLContent := "select * from table_a"

	cluster := db_info.TispectorCluster{
		ID:          0,
		Name:        "tispector",
		Description: "1",
		Addr:        "127.0.0.1",
		User:        "root",
		Pwd:         "123456",
		Ct:          0,
		Ut:          0,
		Operator:    "1",
	}

	var dbName string = "tispector"
	defaultDBName := dbName

	db, err := sql.Open("mysql",
		fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8", cluster.User, cluster.Pwd, cluster.Addr, dbName))
	if err != nil {
		fmt.Printf("open db conn err: %s", err.Error())
	}

	defaultDB, err := sql.Open("mysql",
		fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8", cluster.User, cluster.Pwd, cluster.Addr, defaultDBName))
	if err != nil {
		fmt.Printf("open db conn err: %s", err.Error())
	}

	dbInfo := task.DBInfo{DB: db, DefaultDB: defaultDB, DBName: dbName}
	pass, suggestion, affectRow := checker.Checker.SqlCheck(SQLContent, "", "", &dbInfo)
	if affectRow > 0 {
		fmt.Printf("PASS = %t %s %d", pass, suggestion, affectRow)
	}
	if !pass {
		fmt.Printf("PASS = %t %s %d", pass, suggestion, affectRow)
	}

	dbInfo.CloseConn()

}
