package main

import (
	"fmt"
	"log"
	"os"
	"path/filepath"

	deltalake "github.com/tidbcloud/metering/delta-rs-golang"
)

func main() {
	// Create a temporary directory for the demo
	tempDir, err := os.MkdirTemp("/tmp", "delta_example")
	if err != nil {
		log.Fatal(err)
	}
	// defer os.RemoveAll(tempDir)

	tablePath := filepath.Join(tempDir, "example_table")
	tableName := "example_table"

	// Define the table schema
	columns := []deltalake.ColumnDefinition{
		{Name: "id", Type: "integer", Nullable: false},
		{Name: "name", Type: "string", Nullable: true},
		{Name: "age", Type: "integer", Nullable: true},
		{Name: "active", Type: "boolean", Nullable: true},
		{Name: "salary", Type: "double", Nullable: true},
		{Name: "created_at", Type: "timestamp", Nullable: false},
	}

	// Create table options
	options := deltalake.CreateTableOptions{
		TablePath: tablePath,
		SaveMode:  deltalake.WriteModeOverwrite,
		Columns:   columns,
		TableName: &tableName,
	}

	// Create the Delta Lake table
	fmt.Printf("Creating Delta Lake table at: %s\n", tablePath)
	table, err := deltalake.CreateDeltaLakeTable(options)
	if err != nil {
		log.Fatal("Failed to create table:", err)
	}
	defer table.Close()

	fmt.Println("✅ Delta Lake table created successfully!")

	// Verify the table directory was created
	if _, err := os.Stat(tablePath); err == nil {
		fmt.Printf("✅ Table directory exists at: %s\n", tablePath)

		// List the contents of the table directory
		entries, err := os.ReadDir(tablePath)
		if err == nil {
			fmt.Println("📁 Table directory contents:")
			for _, entry := range entries {
				fmt.Printf("  - %s\n", entry.Name())
			}
		}
	} else {
		fmt.Printf("❌ Table directory not found: %s\n", tablePath)
	}

	fmt.Printf("🎉 Example completed. Delta-rs version: %s\n", deltalake.Version())
}
