package setup

import (
	"context"
	"database/sql"
	"embed"
	"strings"
)

var (
	//go:embed 07/logstore.sql
	createLogstoreSchema07 string
	//go:embed 07/cockroach/access.sql
	//go:embed 07/postgres/access.sql
	createAccessLogsTable07 embed.FS
	//go:embed 07/cockroach/execution.sql
	//go:embed 07/postgres/execution.sql
	createExecutionLogsTable07 embed.FS
)

type LogstoreTables struct {
	dbClient *sql.DB
	username string
	dbType   string
}

func (mig *LogstoreTables) Execute(ctx context.Context) error {
	accessStmt, err := readStmt(createAccessLogsTable07, "07", mig.dbType, "access.sql")
	if err != nil {
		return err
	}
	executionStmt, err := readStmt(createExecutionLogsTable07, "07", mig.dbType, "execution.sql")
	if err != nil {
		return err
	}
	stmt := strings.ReplaceAll(createLogstoreSchema07, "%[1]s", mig.username) + accessStmt + executionStmt
	_, err = mig.dbClient.ExecContext(ctx, stmt)
	return err
}

func (mig *LogstoreTables) String() string {
	return "07_logstore"
}