package main

import (
	"context"
	"testing"
	"time"

	"github.com/jackc/pgx/v4/pgxpool"
	"github.com/stretchr/testify/assert"
	"github.com/stretchr/testify/require"

	"go.skia.org/infra/go/gitiles"
	"go.skia.org/infra/go/httputils"
	"go.skia.org/infra/golden/go/config"
	"go.skia.org/infra/golden/go/sql/schema"
	"go.skia.org/infra/golden/go/sql/sqltest"
)

func TestUpdateCycle_Load1501CommitsFromGitiles_Success(t *testing.T) {

	rfc := repoFollowerConfig{
		Common: config.Common{
			GitRepoBranch: "master",
			GitRepoURL:    "https://skia.googlesource.com/skia.git",
		},
		// Arbitrary commit from 14 Dec 2020
		InitialCommit: "9b395f55ea0f8f92103d33f1ea8e8217bee8aaea",
	}
	// Pretend the test is always running on the morning of 26 Feb 2021, with this
	// commit being the most recent. This commit is 1502 commits after the InitialCommit.
	// Since the gitiles API starts after the initial commit, we expect to load 1501 commits.
	const latestGitHash = "453f143dba3fea76bc777b7d6d933c4017f7e4e8"
	ctx := overrideLatestGitHash(latestGitHash)
	db := sqltest.NewCockroachDBForTestsWithProductionSchema(ctx, t)

	gitilesClient := gitiles.NewRepo(rfc.GitRepoURL, httputils.NewTimeoutClient())
	err := updateCycle(ctx, db, gitilesClient, rfc)
	require.NoError(t, err)

	row := db.QueryRow(ctx, `SELECT count(*) FROM GitCommits`)
	n := 0
	require.NoError(t, row.Scan(&n))
	assert.Equal(t, 1501, n)

	// Spot check some of the entries
	gc := getNthGitCommit(ctx, t, db, 0)
	assert.Equal(t, schema.GitCommitRow{
		GitHash:     latestGitHash,
		CommitID:    "001000001501",
		CommitTime:  time.Date(2021, time.February, 26, 14, 01, 07, 0, time.UTC),
		AuthorEmail: "Joh...",
		Subject:     "Improve dead-code elimination check in SPIR-V.",
	}, gc)

	gc = getNthGitCommit(ctx, t, db, 500)
	assert.Equal(t, schema.GitCommitRow{
		GitHash:     "4d76f63e45f107c9e041ef7ae6534b00b4623044",
		CommitID:    "001000001001",
		CommitTime:  time.Date(2021, time.February, 3, 22, 50, 28, 0, time.UTC),
		AuthorEmail: "Bri...",
		Subject:     "Fix particle bug where uniforms are allocated too late",
	}, gc)

	gc = getNthGitCommit(ctx, t, db, 1000)
	assert.Equal(t, schema.GitCommitRow{
		GitHash:     "9e1cedda632e7fc20147e4e0b4b2f6dc3728283f",
		CommitID:    "001000000501",
		CommitTime:  time.Date(2021, time.January, 14, 14, 38, 18, 0, time.UTC),
		AuthorEmail: "Der...",
		Subject:     "Add generic uniform setter function to SkRuntimeShaderBuilder",
	}, gc)

	gc = getNthGitCommit(ctx, t, db, 1500)
	assert.Equal(t, schema.GitCommitRow{
		GitHash:     "f79b298b9d0fb57827e43967ee8bb799c37f7135",
		CommitID:    "001000000001",
		CommitTime:  time.Date(2020, time.December, 14, 20, 04, 07, 0, time.UTC),
		AuthorEmail: "Mic...",
		Subject:     "Remove UPDATE_DEVICE_CLIP macro",
	}, gc)
}

func getNthGitCommit(ctx context.Context, t *testing.T, db *pgxpool.Pool, n int) schema.GitCommitRow {
	row := db.QueryRow(ctx, `SELECT * FROM GitCommits ORDER BY commit_id DESC LIMIT 1 OFFSET $1`, n)
	var gc schema.GitCommitRow
	require.NoError(t, row.Scan(&gc.GitHash, &gc.CommitID, &gc.CommitTime, &gc.AuthorEmail, &gc.Subject))
	gc.CommitTime = gc.CommitTime.UTC()
	// We would rather not put real-world names and emails in public test assertions
	gc.AuthorEmail = gc.AuthorEmail[:3] + "..."
	return gc
}

func overrideLatestGitHash(gitHash string) context.Context {
	return context.WithValue(context.Background(), overrideLatestCommitKey, gitHash)
}
