package e00_basics

import (
	"context"

	"github.com/qor5/admin/activity"
	"github.com/qor5/admin/presets"
	"gorm.io/driver/sqlite"
	"gorm.io/gorm"
)

func NewActivitySample() {
	// @snippet_begin(NewActivitySample)
	presetsBuilder := presets.New()
	db, err := gorm.Open(sqlite.Open("/tmp/activity.db"), &gorm.Config{})
	if err != nil {
		panic(err)
	}
	activity.New(presetsBuilder, db)
	// @snippet_end
}

func ActivityRegisterModelsSample() {
	// @snippet_begin(ActivityRegisterPresetsModelsSample)
	presetsBuilder := presets.New()
	db, err := gorm.Open(sqlite.Open("/tmp/activity.db"), &gorm.Config{})
	if err != nil {
		panic(err)
	}

	type Product struct {
		Title string
		Code  string
		Price float64
	}

	productModel := presetsBuilder.Model(&Product{})
	activityBuilder := activity.New(presetsBuilder, db)
	activityBuilder.RegisterModel(productModel).UseDefaultTab().AddKeys("Title").AddIgnoredFields("Code").SkipDelete()
	// @snippet_end
}

func ActivityRecordLogSample() {
	// @snippet_begin(ActivityRecordLogSample)
	presetsBuilder := presets.New()
	db, err := gorm.Open(sqlite.Open("/tmp/activity.db"), &gorm.Config{})
	if err != nil {
		panic(err)
	}

	type Product struct {
		Title string
		Code  string
		Price float64
	}

	activityBuilder := activity.New(presetsBuilder, db)
	activityBuilder.RegisterModel(&Product{})
	currentCtx := context.WithValue(context.Background(), activity.CreatorContextKey, "user1")
	activityBuilder.AddRecords("Publish", currentCtx, &Product{Title: "Product 1", Code: "P1", Price: 100}) // custmize the action name
	activityBuilder.AddRecords("Update Price", currentCtx, &Product{Title: "Product 1", Code: "P1", Price: 200})

	// @snippet_end
}