package worker_test

import (
	"os"
	"path/filepath"
	"testing"

	"github.com/jfraeys/fetch_ml/internal/worker"
)

func TestScanArtifacts_SkipsKnownPathsAndLogs(t *testing.T) {
	runDir := t.TempDir()

	mustWrite := func(rel string, data []byte) {
		p := filepath.Join(runDir, rel)
		if err := os.MkdirAll(filepath.Dir(p), 0750); err != nil {
			t.Fatalf("mkdir: %v", err)
		}
		if err := os.WriteFile(p, data, 0600); err != nil {
			t.Fatalf("write file: %v", err)
		}
	}

	mustWrite("run_manifest.json", []byte("{}"))
	mustWrite("output.log", []byte("log"))
	mustWrite("code/ignored.txt", []byte("ignore"))
	mustWrite("snapshot/ignored.bin", []byte("ignore"))

	mustWrite("results/metrics.jsonl", []byte("m"))
	mustWrite("checkpoints/best.pt", []byte("checkpoint"))
	mustWrite("plots/loss.png", []byte("png"))

	art, err := worker.ScanArtifacts(runDir, false)
	if err != nil {
		t.Fatalf("scanArtifacts: %v", err)
	}
	if art == nil {
		t.Fatalf("expected artifacts")
	}

	paths := make([]string, 0, len(art.Files))
	var total int64
	for _, f := range art.Files {
		paths = append(paths, f.Path)
		total += f.SizeBytes
	}

	want := []string{
		"checkpoints/best.pt",
		"plots/loss.png",
		"results/metrics.jsonl",
	}
	if len(paths) != len(want) {
		t.Fatalf("expected %d files, got %d: %v", len(want), len(paths), paths)
	}
	for i := range want {
		if paths[i] != want[i] {
			t.Fatalf("expected paths[%d]=%q, got %q", i, want[i], paths[i])
		}
	}

	if art.TotalSizeBytes != total {
		t.Fatalf("expected total_size_bytes=%d, got %d", total, art.TotalSizeBytes)
	}
	if art.DiscoveryTime.IsZero() {
		t.Fatalf("expected discovery_time")
	}
}
