package main

import (
	"context"
	"fmt"

	"encoding/json"
	"io/ioutil"

	driver "github.com/arangodb/go-driver"
	"github.com/arangodb/go-driver/http"
)

// Document with Empty struct to retrieve all data from the DB Document
type Document map[string]interface{}

// GeneralFormat is a generalformat to send data the frontend
type GeneralFormat map[string]interface{}

//attr interface{}

//map[1 , 2 , 3 map [ .. ]]

func main() {
	conn, err := http.NewConnection(http.ConnectionConfig{
		Endpoints: []string{"http://localhost:8529"},
	})
	if err != nil {
		fmt.Printf("auwa das tut weh") // Handle error
	}
	c, err := driver.NewClient(driver.ClientConfig{
		Connection:     conn,
		Authentication: driver.BasicAuthentication("root", "openSesame"),
	})
	if err != nil {
		fmt.Printf("doet het niet") // Handle error
	}

	ctx := context.Background()
	db, err := c.Database(ctx, "_system")
	if err != nil {
		// handle error
	}

	query := "FOR d IN Characters LIMIT 10 RETURN d"
	cursor, err := db.Query(ctx, query, nil)

	if err != nil {
		fmt.Printf("shalom") // handle error
	}
	defer cursor.Close()
	for {
		var doc Document
		_, err := cursor.ReadDocument(ctx, &doc)
		if driver.IsNoMoreDocuments(err) {
			break
		} else if err != nil {
			// handle other errors
		}
		//fmt.Printf("%T\n", doc)
		formatToJSON(doc)
	}

}

func formatToJSON(doc Document) {
	//b, err := json.Marshal(doc)
	//if err != nil {
	//handle error
	//}

	data := parseData(doc)
	fmt.Println(data)
	file, _ := json.MarshalIndent(data, "", " ")

	_ = ioutil.WriteFile("test.json", file, 0644)
}

func parseData(doc Document) Document {
	data := make(Document)
	data["_id"] = doc["_id"]
	delete(doc, "_id")
	data["_key"] = doc["_key"]
	delete(doc, "_key")
	data["_rev"] = doc["_rev"]
	delete(doc, "_rev")
	data["attributes"] = doc

	//delete(doc, "_key")
	//data.rev = fmt.Sprintf("%v", doc["_rev"])

	// delete(doc, "_rev")
	// data.attr = doc
	return data
}