package imp

import (
	"database/sql"
	"fmt"

	l4g "github.com/alecthomas/log4go"
	"github.com/dailymotion/allure-go"
	sqlpkg "github.com/tidbcloud/qa-PlatformAPIAuto/webScene/pkg/sql"
)

func (b *BaseImportScene) CreateTargetTableStep(targetTable Table) {
	allure.Step(
		allure.Description("create target tables"),
		allure.Action(func() {
			b.createTargetTable(targetTable)
		}),
	)
}

func (b *BaseImportScene) createTargetTable(targetTable Table) {
	b.Execute(func(db *sql.DB) error {
		err := sqlpkg.DropSchema(db, targetTable.SchemaName)
		if err != nil {
			errorMsg := fmt.Errorf("drop schema %s failed, error: %s", targetTable.SchemaName, err)
			l4g.Error(errorMsg)
			return errorMsg
		}
		err = sqlpkg.CreateSchema(db, targetTable.SchemaName)
		l4g.Info("targetTable.SchemaName:%s", targetTable.SchemaName)
		if err != nil {
			errorMsg := fmt.Errorf("create schema %s failed, error: %s", targetTable.SchemaName, err)
			l4g.Error(errorMsg)
			return errorMsg
		}
		_, err = db.Exec(targetTable.SchemaStatement)
		if err != nil {
			errorMsg := fmt.Errorf("%s failed, error: %s", targetTable.SchemaStatement, err)
			l4g.Error(errorMsg)
			return errorMsg
		}
		return nil
	})
}

func (b *BaseImportScene) TruncateTargetTableStep(targetTable Table) {
	allure.Step(
		allure.Description("truncate target tables"),
		allure.Action(func() {
			b.truncateTargetTable(targetTable)
		}),
	)
}

func (b *BaseImportScene) truncateTargetTable(targetTable Table) {
	b.Execute(func(db *sql.DB) error {
		err := sqlpkg.TruncateTable(db, targetTable.SchemaName, targetTable.TableName)
		if err != nil {
			errorMsg := fmt.Errorf("truncate table `%s`.`%s` failed, error: %s", targetTable.SchemaName, targetTable.TableName, err)
			l4g.Error(errorMsg)
			return errorMsg
		}
		return nil
	})
}
