package services

import (
	"testing"

	"github.com/Wikid82/charon/backend/internal/models"
	"github.com/google/uuid"
	"github.com/stretchr/testify/assert"
	"github.com/stretchr/testify/require"
	"gorm.io/driver/sqlite"
	"gorm.io/gorm"
)

func TestNotificationService_TemplateCRUD(t *testing.T) {
	t.Parallel()

	db, err := gorm.Open(sqlite.Open("file:"+uuid.NewString()+"?mode=memory&cache=shared"), &gorm.Config{})
	require.NoError(t, err)
	require.NoError(t, db.AutoMigrate(&models.NotificationTemplate{}))

	svc := NewNotificationService(db)

	tmpl := &models.NotificationTemplate{
		Name:        "Custom",
		Description: "initial description",
		Config:      `{"message":"hello"}`,
		Template:    "custom",
	}

	require.NoError(t, svc.CreateTemplate(tmpl))
	require.NotEmpty(t, tmpl.ID)

	fetched, err := svc.GetTemplate(tmpl.ID)
	require.NoError(t, err)
	assert.Equal(t, tmpl.Name, fetched.Name)
	assert.Equal(t, tmpl.Description, fetched.Description)

	tmpl.Description = "updated description"
	require.NoError(t, svc.UpdateTemplate(tmpl))

	list, err := svc.ListTemplates()
	require.NoError(t, err)
	require.Len(t, list, 1)
	assert.Equal(t, "updated description", list[0].Description)

	require.NoError(t, svc.DeleteTemplate(tmpl.ID))
	list, err = svc.ListTemplates()
	require.NoError(t, err)
	assert.Empty(t, list)
}
