package schema

import (
	"context"
	"fmt"
	"math/rand"
	"testing"
	"time"

	"github.com/jackc/pgx/v4/pgxpool"
	"github.com/stretchr/testify/require"
	"go.skia.org/infra/go/emulators"
	"go.skia.org/infra/go/emulators/cockroachdb_instance"
)

const databaseNamePrefix = "schema"

type Machines struct{}
type Tasks struct{}

type Tables struct {
	Machines []Machines
	Tasks    []Tasks
}

func TestTableNames_NonEmpytTables_ReturnsTableNames(t *testing.T) {
	require.Equal(t, []string{"machines", "tasks"}, TableNames(Tables{}))
}

func TestTableNames_EmpytTables_ReturnsEmptySlice(t *testing.T) {
	require.Empty(t, TableNames(struct{}{}))
}

const schema = `CREATE TABLE IF NOT EXISTS Machines (
	dimensions JSONB NOT NULL,
	task_request JSONB,
	task_started TIMESTAMPTZ NOT NULL DEFAULT (0)::TIMESTAMPTZ,
	machine_id STRING PRIMARY KEY AS (dimensions->'id'->>0) STORED,
	running_task bool AS (task_request IS NOT NULL) STORED,
	INVERTED INDEX dimensions_gin (dimensions),
	INDEX by_running_task (running_task)
  );

  CREATE TABLE IF NOT EXISTS Tasks (
	result JSONB NOT NULL,
	id STRING NOT NULL PRIMARY KEY,
	machine_id STRING NOT NULL,
	finished TIMESTAMPTZ NOT NULL,
	status STRING NOT NULL DEFAULT '',
	INDEX by_machine_id (machine_id),
	INDEX by_status (status)
  );
`

func setupForTest(t *testing.T) *pgxpool.Pool {
	cockroachdb_instance.Require(t)

	rand.Seed(time.Now().UnixNano())
	databaseName := fmt.Sprintf("%s_%d", databaseNamePrefix, rand.Uint64())
	host := emulators.GetEmulatorHostEnvVar(emulators.CockroachDB)
	connectionString := fmt.Sprintf("postgresql://root@%s/%s?sslmode=disable", host, databaseName)

	ctx := context.Background()
	db, err := pgxpool.Connect(ctx, connectionString)
	require.NoError(t, err)

	// Create a database in cockroachdb just for this test.
	_, err = db.Exec(ctx, fmt.Sprintf(`
		CREATE DATABASE %s;
		SET DATABASE = %s;`, databaseName, databaseName))
	require.NoError(t, err)

	_, err = db.Exec(ctx, schema)
	require.NoError(t, err)

	t.Cleanup(func() {
		db.Close()
	})
	return db

}

func TestGetDescriptionCDB(t *testing.T) {
	db := setupForTest(t)
	desc, err := GetDescription(context.Background(), db, Tables{}, CockroachDBType)
	require.NoError(t, err)

	expected := Description{
		ColumnNameAndType: map[string]string{
			"machines.dimensions":   "jsonb def: nullable:NO",
			"machines.machine_id":   "text def: nullable:NO",
			"machines.running_task": "boolean def: nullable:YES",
			"machines.task_request": "jsonb def: nullable:YES",
			"machines.task_started": "timestamp with time zone def:0:::INT8::TIMESTAMPTZ nullable:NO",
			"tasks.finished":        "timestamp with time zone def: nullable:NO",
			"tasks.id":              "text def: nullable:NO",
			"tasks.machine_id":      "text def: nullable:NO",
			"tasks.result":          "jsonb def: nullable:NO",
			"tasks.status":          "text def:'':::STRING nullable:NO",
		},
		IndexNames: []string{
			"machines.dimensions_gin",
			"machines.by_running_task",
			"tasks.by_status",
			"tasks.by_machine_id",
		},
	}

	require.Equal(t, expected, *desc)
}
