package db

import (
	"context"

	"github.com/stretchr/testify/require"
	"go.skia.org/infra/go/deepequal/assertdeep"
	"go.skia.org/infra/go/now"
	"go.skia.org/infra/go/sktest"
	"go.skia.org/infra/task_scheduler/go/types"
)

var deleted = true

func TestModifiedTasksCh(t sktest.TestingT, db DB) {
	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()
	taskCh := db.ModifiedTasksCh(ctx)

	// Initial snapshot contains all results, ie. empty right now.
	<-taskCh

	// Add one task, ensure that it shows up.
	expect := []*types.Task{
		{
			Id:      "0",
			Created: now.Now(ctx),
		},
	}
	require.NoError(t, db.PutTasks(ctx, expect))
	got := <-taskCh
	assertdeep.Equal(t, expect, got)

	// Add two tasks.
	expect = []*types.Task{
		{
			Id:      "1",
			Created: now.Now(ctx),
		},
		{
			Id:      "2",
			Created: now.Now(ctx),
		},
	}
	require.NoError(t, db.PutTasks(ctx, expect))
	got = <-taskCh
	assertdeep.Equal(t, expect, got)

	// Modify a task.
	expect[0].Name = "my-task"
	require.NoError(t, db.PutTasks(ctx, expect[:1]))
	got = <-taskCh
	assertdeep.Equal(t, expect[:1], got)

	// Create a second channel. Modify an entry after we receive it and
	// ensure that we don't see that modification elsewhere.
	dupCh := db.ModifiedTasksCh(ctx)
	<-dupCh // Ignore first snapshot.
	expect[0].Name = "renamed again"
	require.NoError(t, db.PutTasks(ctx, expect[:1]))
	expect[0].Name = "changed my mind"
	got1 := <-taskCh
	got2 := <-dupCh
	assertdeep.Equal(t, got1, got2)
	require.Equal(t, "renamed again", got1[0].Name)
	got1[0].Name = "changed my mind again"
	require.Equal(t, "renamed again", got2[0].Name)

	// Assert that the channel gets closed when we cancel the context.
	cancel()
	_, stillOpen := <-taskCh
	require.False(t, stillOpen)
}

func TestModifiedJobsCh(t sktest.TestingT, db DB) {
	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()
	jobCh := db.ModifiedJobsCh(ctx)

	// Initial snapshot contains all results, ie. empty right now.
	<-jobCh

	// Add one job, ensure that it shows up.
	expect := []*types.Job{
		{
			Id:      "0",
			Created: now.Now(ctx),
		},
	}
	require.NoError(t, db.PutJobs(ctx, expect))
	got := <-jobCh
	assertdeep.Equal(t, expect, got)

	// Add two jobs.
	expect = []*types.Job{
		{
			Id:      "1",
			Created: now.Now(ctx),
		},
		{
			Id:      "2",
			Created: now.Now(ctx),
		},
	}
	require.NoError(t, db.PutJobs(ctx, expect))
	got = <-jobCh
	assertdeep.Equal(t, expect, got)

	// Modify a job.
	expect[0].Name = "my-job"
	require.NoError(t, db.PutJobs(ctx, expect[:1]))
	got = <-jobCh
	assertdeep.Equal(t, expect[:1], got)

	// Create a second channel. Modify an entry after we receive it and
	// ensure that we don't see that modification elsewhere.
	dupCh := db.ModifiedJobsCh(ctx)
	<-dupCh // Ignore first snapshot.
	expect[0].Name = "renamed again"
	require.NoError(t, db.PutJobs(ctx, expect[:1]))
	expect[0].Name = "changed my mind"
	got1 := <-jobCh
	got2 := <-dupCh
	assertdeep.Equal(t, got1, got2)
	require.Equal(t, "renamed again", got1[0].Name)
	got1[0].Name = "changed my mind again"
	require.Equal(t, "renamed again", got2[0].Name)

	// Assert that the channel gets closed when we cancel the context.
	cancel()
	_, stillOpen := <-jobCh
	require.False(t, stillOpen)
}

func TestModifiedTaskCommentsCh(t sktest.TestingT, db DB) {
	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()
	taskCommentCh := db.ModifiedTaskCommentsCh(ctx)

	// Initial snapshot contains all results, ie. empty right now.
	<-taskCommentCh

	// Add one taskComment, ensure that it shows up.
	expect := []*types.TaskComment{
		{
			Repo:      "my-repo",
			Revision:  "abc",
			Name:      "taskname",
			Timestamp: now.Now(ctx),
		},
	}
	require.NoError(t, db.PutTaskComment(ctx, expect[0]))
	got := <-taskCommentCh
	assertdeep.Equal(t, expect, got)

	// Add two taskComments.
	expect = []*types.TaskComment{
		{
			Repo:      "my-repo",
			Revision:  "def",
			Name:      "taskname",
			Timestamp: now.Now(ctx),
		},
		{
			Repo:      "my-repo",
			Revision:  "123",
			Name:      "taskname",
			Timestamp: now.Now(ctx),
		},
	}
	require.NoError(t, db.PutTaskComment(ctx, expect[0]))
	got = <-taskCommentCh
	assertdeep.Equal(t, expect[:1], got)
	require.NoError(t, db.PutTaskComment(ctx, expect[1]))
	got = <-taskCommentCh
	assertdeep.Equal(t, expect[1:], got)

	// We can't modify TaskComments.

	// Delete a taskComment.
	require.NoError(t, db.DeleteTaskComment(ctx, expect[1]))
	got = <-taskCommentCh
	require.Equal(t, expect[1].Deleted, &deleted)
	assertdeep.Equal(t, expect[1:], got)

	// Create a second channel. Modify an entry after we receive it and
	// ensure that we don't see that modification elsewhere.
	dupCh := db.ModifiedTaskCommentsCh(ctx)
	<-dupCh // Ignore first snapshot.
	expect[0].Name = "renamed again"
	require.NoError(t, db.PutTaskComment(ctx, expect[0]))
	expect[0].Name = "changed my mind"
	got1 := <-taskCommentCh
	got2 := <-dupCh
	assertdeep.Equal(t, got1, got2)
	require.Equal(t, "renamed again", got1[0].Name)
	got1[0].Name = "changed my mind again"
	require.Equal(t, "renamed again", got2[0].Name)

	// Assert that the channel gets closed when we cancel the context.
	cancel()
	_, stillOpen := <-taskCommentCh
	require.False(t, stillOpen)
}

func TestModifiedTaskSpecCommentsCh(t sktest.TestingT, db DB) {
	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()
	taskSpecCommentCh := db.ModifiedTaskSpecCommentsCh(ctx)

	// Initial snapshot contains all results, ie. empty right now.
	<-taskSpecCommentCh

	// Add one taskSpecComment, ensure that it shows up.
	expect := []*types.TaskSpecComment{
		{
			Repo:      "my-repo",
			Name:      "taskname",
			Timestamp: now.Now(ctx),
		},
	}
	require.NoError(t, db.PutTaskSpecComment(ctx, expect[0]))
	got := <-taskSpecCommentCh
	assertdeep.Equal(t, expect, got)

	// Add two taskSpecComments.
	expect = []*types.TaskSpecComment{
		{
			Repo:      "my-repo",
			Name:      "taskname2",
			Timestamp: now.Now(ctx),
		},
		{
			Repo:      "my-repo",
			Name:      "taskname3",
			Timestamp: now.Now(ctx),
		},
	}
	require.NoError(t, db.PutTaskSpecComment(ctx, expect[0]))
	got = <-taskSpecCommentCh
	assertdeep.Equal(t, expect[:1], got)
	require.NoError(t, db.PutTaskSpecComment(ctx, expect[1]))
	got = <-taskSpecCommentCh
	assertdeep.Equal(t, expect[1:], got)

	// We can't modify TaskSpecComments.

	// Delete a taskSpecComment.
	require.NoError(t, db.DeleteTaskSpecComment(ctx, expect[1]))
	got = <-taskSpecCommentCh
	require.Equal(t, expect[1].Deleted, &deleted)
	assertdeep.Equal(t, expect[1:], got)

	// Create a second channel. Modify an entry after we receive it and
	// ensure that we don't see that modification elsewhere.
	dupCh := db.ModifiedTaskSpecCommentsCh(ctx)
	<-dupCh // Ignore first snapshot.
	expect[0].Name = "renamed again"
	require.NoError(t, db.PutTaskSpecComment(ctx, expect[0]))
	expect[0].Name = "changed my mind"
	got1 := <-taskSpecCommentCh
	got2 := <-dupCh
	assertdeep.Equal(t, got1, got2)
	require.Equal(t, "renamed again", got1[0].Name)
	got1[0].Name = "changed my mind again"
	require.Equal(t, "renamed again", got2[0].Name)

	// Assert that the channel gets closed when we cancel the context.
	cancel()
	_, stillOpen := <-taskSpecCommentCh
	require.False(t, stillOpen)
}

func TestModifiedCommitCommentsCh(t sktest.TestingT, db DB) {
	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()
	commitCommentCh := db.ModifiedCommitCommentsCh(ctx)

	// Initial snapshot contains all results, ie. empty right now.
	<-commitCommentCh

	// Add one commitComment, ensure that it shows up.
	expect := []*types.CommitComment{
		{
			Repo:      "my-repo",
			Revision:  "abc",
			Timestamp: now.Now(ctx),
		},
	}
	require.NoError(t, db.PutCommitComment(ctx, expect[0]))
	got := <-commitCommentCh
	assertdeep.Equal(t, expect, got)

	// Add two commitComments.
	expect = []*types.CommitComment{
		{
			Repo:      "my-repo",
			Revision:  "def",
			Timestamp: now.Now(ctx),
		},
		{
			Repo:      "my-repo",
			Revision:  "123",
			Timestamp: now.Now(ctx),
		},
	}
	require.NoError(t, db.PutCommitComment(ctx, expect[0]))
	got = <-commitCommentCh
	assertdeep.Equal(t, expect[:1], got)
	require.NoError(t, db.PutCommitComment(ctx, expect[1]))
	got = <-commitCommentCh
	assertdeep.Equal(t, expect[1:], got)

	// We can't modify CommitComments.

	// Delete a commitComment.
	require.NoError(t, db.DeleteCommitComment(ctx, expect[1]))
	got = <-commitCommentCh
	require.Equal(t, expect[1].Deleted, &deleted)
	assertdeep.Equal(t, expect[1:], got)

	// Create a second channel. Modify an entry after we receive it and
	// ensure that we don't see that modification elsewhere.
	dupCh := db.ModifiedCommitCommentsCh(ctx)
	<-dupCh // Ignore first snapshot.
	expect[0].Revision = "renamed again"
	require.NoError(t, db.PutCommitComment(ctx, expect[0]))
	expect[0].Revision = "changed my mind"
	got1 := <-commitCommentCh
	got2 := <-dupCh
	assertdeep.Equal(t, got1, got2)
	require.Equal(t, "renamed again", got1[0].Revision)
	got1[0].Revision = "changed my mind again"
	require.Equal(t, "renamed again", got2[0].Revision)

	// Assert that the channel gets closed when we cancel the context.
	cancel()
	_, stillOpen := <-commitCommentCh
	require.False(t, stillOpen)
}
