package search

import (
	"context"
	"fmt"
	"log"
	"tercul/internal/domain"
	"time"

	"github.com/weaviate/weaviate-go-client/v5/weaviate"
)

var Client *weaviate.Client

// UpsertWork inserts or updates a Work object in Weaviate
func UpsertWork(client *weaviate.Client, work domain.Work) error {
	// Create a properties map with the fields that exist in the Work model
	properties := map[string]interface{}{
		"language":    work.Language,
		"title":       work.Title,
		"description": work.Description,
		"status":      work.Status,
		// Add timestamps
		"createdAt": work.CreatedAt.Format(time.RFC3339),
		"updatedAt": work.UpdatedAt.Format(time.RFC3339),
	}

	_, err := client.Data().Creator().
		WithClassName("Work").
		WithID(fmt.Sprintf("%d", work.ID)). // Use the ID from the Work model
		WithProperties(properties).
		Do(context.Background())

	if err != nil {
		log.Printf("Weaviate Upsert Error for Work ID %d: %v", work.ID, err)
	}
	return err
}
