package chaos

import (
	"fmt"

	"github.com/pingcap/endless/pkg/client/tidb"
	"github.com/pingcap/endless/pkg/util/schedule"
	"github.com/pingcap/log"
	"github.com/pingcap/test-infra/sdk/resource"
	"go.uber.org/zap"
)

var _ schedule.DoUndo = &CompactTiFlashReplica{}

type CompactTiFlashReplica struct {
	tidbCli *tidb.Client
}

func NewCompactTiFlashReplica(tc resource.TiDBCluster) (*CompactTiFlashReplica, error) {
	conn, err := tc.GetDB("")
	if err != nil {
		return nil, err
	}
	return &CompactTiFlashReplica{
		tidbCli: tidb.NewClient(conn),
	}, nil
}

func (c *CompactTiFlashReplica) Do() error {
	tbls, err := c.tidbCli.GetAllTiFlashReplicaAvailableTables()
	if err != nil {
		return err
	}
	for _, t := range tbls {
		log.Info("start compact tiflash replica", zap.String("table name", t))
		_, err := c.tidbCli.Exec(fmt.Sprintf("alter table %s compact tiflash replica", t))
		log.Info("end compact tiflash replica", zap.String("table name", t))
		if err != nil {
			return err
		}
	}
	return nil
}

func (c *CompactTiFlashReplica) Undo() error { /* nothing need to be done */ return nil }
