package repo

import (
	"strings"
	"testing"

	ccmod "github.com/tidbcloud/devops/models/cloudconfig"

	"gorm.io/driver/sqlite"
	"gorm.io/gorm"
)

func TestConfigurationChangeCreateTimeOptionsBuildSQL(t *testing.T) {
	db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{DryRun: true})
	if err != nil {
		t.Fatalf("open dry-run db: %v", err)
	}

	createAfter := int64(1779000000)
	createBefore := int64(1779426353)
	query := db.Model(&ccmod.ConfigurationChange{})
	query = ConfigurationChangeOpts.CreatedAtStartUnixSec(createAfter).Apply(query)
	query = ConfigurationChangeOpts.CreatedAtEndUnixSec(createBefore).Apply(query)

	stmt := query.Find(&[]ccmod.ConfigurationChange{}).Statement
	sql := stmt.SQL.String()
	if sql == "" {
		t.Fatalf("expected generated SQL")
	}
	if !strings.Contains(sql, "created_at >= FROM_UNIXTIME(?)") {
		t.Fatalf("SQL = %q, want created_at_start_unix_sec filter", sql)
	}
	if !strings.Contains(sql, "created_at <= FROM_UNIXTIME(?)") {
		t.Fatalf("SQL = %q, want created_at_end_unix_sec filter", sql)
	}
	if !containsSQLVar(stmt.Vars, createAfter) {
		t.Fatalf("SQL vars = %#v, want %d", stmt.Vars, createAfter)
	}
	if !containsSQLVar(stmt.Vars, createBefore) {
		t.Fatalf("SQL vars = %#v, want %d", stmt.Vars, createBefore)
	}
}

func containsSQLVar(vars []any, want int64) bool {
	for _, got := range vars {
		if got == want {
			return true
		}
	}
	return false
}
