// Пример использования Encode — шифрование записей в коллекции (AES-256-GCM).
package main

import (
	"fmt"
	"log"
	"os"
	"time"

	"direct-dev.ru/gitea/GiteaAdmin/elowdb-go/pkg/linedb"
)

func main() {
	os.RemoveAll("./data")

	initOptions := &linedb.LineDbInitOptions{
		CacheSize: 100,
		CacheTTL:  time.Minute,
		DBFolder:  "./data",
		Collections: []linedb.JSONLFileOptions{
			{
				CollectionName: "secret_users",
				AllocSize:      256,
				Encode:         true,
				EncodeKey:      "my-secret-password-12345",
			},
		},
	}

	db := linedb.NewLineDb(nil)
	if err := db.Init(false, initOptions); err != nil {
		log.Fatalf("Init failed: %v", err)
	}
	defer db.Close()

	opts := linedb.LineDbAdapterOptions{}

	// Вставка
	users := []any{
		map[string]any{"name": "alice", "email": "alice@secret.com", "role": "admin"},
		map[string]any{"name": "bob", "email": "bob@secret.com", "role": "user"},
	}
	if err := db.Insert(users, "secret_users", opts); err != nil {
		log.Fatalf("Insert failed: %v", err)
	}
	fmt.Println("Insert OK")

	// Чтение
	all, err := db.Read("secret_users", opts)
	if err != nil {
		log.Fatalf("Read failed: %v", err)
	}
	fmt.Printf("Records: %d\n", len(all))
	for _, r := range all {
		fmt.Printf("  %+v\n", r)
	}

	// Файл содержит зашифрованные строки (base64)
	raw, _ := os.ReadFile("./data/secret_users.jsonl")
	fmt.Printf("\nRaw file (encrypted base64):\n%s\n", string(raw))
}
