// Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build cloud && !plan9

package dbtest

import (
	"crypto/rand"
	"database/sql"
	"encoding/base64"
	"flag"
	"fmt"
	"testing"

	_ "github.com/GoogleCloudPlatform/cloudsql-proxy/proxy/dialers/mysql"
)

var cloud = flag.Bool("cloud", false, "connect to Cloud SQL database instead of in-memory SQLite")
var cloudsql = flag.String("cloudsql", "golang-org:us-central1:golang-org", "name of Cloud SQL instance to run tests on")

// createEmptyDB makes a new, empty database for the test.
func createEmptyDB(t *testing.T) (driver, dsn string, cleanup func()) {
	if !*cloud {
		return "sqlite3", ":memory:", nil
	}
	buf := make([]byte, 6)
	if _, err := rand.Read(buf); err != nil {
		t.Fatal(err)
	}

	name := "perfdata-test-" + base64.RawURLEncoding.EncodeToString(buf)

	prefix := fmt.Sprintf("root:@cloudsql(%s)/", *cloudsql)

	db, err := sql.Open("mysql", prefix)
	if err != nil {
		t.Fatal(err)
	}

	if _, err := db.Exec(fmt.Sprintf("CREATE DATABASE `%s`", name)); err != nil {
		db.Close()
		t.Fatal(err)
	}

	t.Logf("Using database %q", name)

	return "mysql", prefix + name + "?interpolateParams=true", func() {
		if _, err := db.Exec(fmt.Sprintf("DROP DATABASE `%s`", name)); err != nil {
			t.Error(err)
		}
		db.Close()
	}
}
