package integration

import (
	"context"
	"io"
	"log/slog"
	"testing"

	"github.com/TaruLab/keluargamart-backend/internal/dbmigrate"
	"github.com/TaruLab/keluargamart-backend/internal/hr"
	"github.com/TaruLab/keluargamart-backend/internal/system"
)

func TestEmployees_ListSmoke(t *testing.T) {
	pool := testPool(t)
	ctx := context.Background()
	if err := dbmigrate.Run(ctx, pool, slog.New(slog.NewTextHandler(io.Discard, nil))); err != nil {
		t.Fatalf("migrate: %v", err)
	}
	num, name := unique("EMP-"), unique("Cover ")
	if _, err := pool.Exec(ctx,
		`INSERT INTO employees (employee_number, name) VALUES ($1, $2)`, num, name); err != nil {
		t.Fatalf("seed employee: %v", err)
	}
	svc := hr.NewService(hr.NewRepository(pool), seqAdapter{pool}, wib)
	rows, total, err := svc.ListEmployees(ctx, hr.Filter{}, "", nil)
	if err != nil {
		t.Fatalf("ListEmployees: %v", err)
	}
	if total < 1 || len(rows) == 0 {
		t.Fatalf("ListEmployees returned no rows after insert")
	}
	for _, e := range rows {
		if e.Name == name {
			return
		}
	}
	t.Errorf("inserted employee %q not listed back", name)
}

func TestNotifications_ProviderSmoke(t *testing.T) {
	pool := testPool(t)
	ctx := context.Background()
	if err := dbmigrate.Run(ctx, pool, slog.New(slog.NewTextHandler(io.Discard, nil))); err != nil {
		t.Fatalf("migrate: %v", err)
	}
	setUp(t, pool)
	svc := system.NewService(system.NewRepository(pool), wib).
		WithNotificationProvider(system.NotificationProvider(pool))
	items, err := svc.ListNotifications(ctx, nil)
	if err != nil {
		t.Fatalf("ListNotifications: %v", err)
	}
	_ = items // seeded-or-empty: no-error is the assertion
}
