package entity

import (
	"testing"
	"time"

	"github.com/stretchr/testify/require"
)

func TestImportIntoSubTasks_ValueScanRoundTrip(t *testing.T) {
	startedAt := time.Date(2026, time.June, 22, 17, 0, 0, 0, time.UTC)
	finishedAt := startedAt.Add(2 * time.Minute)
	in := ImportIntoSubTasks{
		ControlPlaneFailed: true,
		SubTasks: []ImportIntoSubTask{{
			DataBase:                     "db1",
			TableName:                    "t1",
			Result:                       ImportTableResultWarning,
			Message:                      "warning",
			ImportStartedAt:              &startedAt,
			ImportFinishedAt:             &finishedAt,
			ImportIntoPhase:              "writing",
			ImportIntoJobID:              42,
			ImportIntoJobStatus:          ImportIntoJobStatusRunning,
			ImportIntoFileType:           "CSV",
			ImportIntoFileCompression:    "GZIP",
			ImportIntoSchemaFile:         "s3://bucket/schema.sql",
			ImportIntoFilesWildcard:      "s3://bucket/data/*.csv",
			ImportIntoTotalSize:          1024,
			ImportedRows:                 99,
			CurrentStep:                  "importing",
			CurrentStepTotalSize:         "1 KiB",
			CurrentStepProgressPercent:   50,
			CurrentStepETA:               "1m",
			CurrentStepProcessedDataSize: "512 B",
			Columns:                      []string{"id", "name"},
			CurrentStepSpeed:             "10 MiB/s",
		}},
	}

	raw, err := in.Value()
	require.NoError(t, err)

	var out ImportIntoSubTasks
	require.NoError(t, out.Scan([]byte(raw.(string))))
	require.Equal(t, in, out)
}

func TestImportIntoPrecheckTableMetas_ValueScanRoundTrip(t *testing.T) {
	in := ImportIntoPrecheckTableMetas{
		{Database: "db1", Table: "t1", FilesWildcard: "s3://bucket/a/*.csv"},
		{Database: "db2", Table: "t2", FilesWildcard: "s3://bucket/b/*.csv"},
	}

	raw, err := in.Value()
	require.NoError(t, err)

	var out ImportIntoPrecheckTableMetas
	require.NoError(t, out.Scan([]byte(raw.(string))))
	require.Equal(t, in, out)
}
