package arango_db

import (
	"context"
	"log"

	driver "github.com/arangodb/go-driver"
	"github.com/pkg/errors"
)

type DataBase struct {
	DB          driver.Database
	ctx         context.Context
	collections map[string]*Collection
}

func NewDataBase(ctx context.Context, client *Client, db_name string) *DataBase {
	// Проверим существование базы данных
	exists, ere := client.DatabaseExists(ctx, db_name)
	if ere != nil {
		log.Fatal(ere)
	} else if exists {
		db, eru := client.Database(ctx, db_name)
		if eru != nil {
			log.Fatal(eru)
		}

		//
		return &DataBase{
			DB:          db,
			ctx:         ctx,
			collections: make(map[string]*Collection),
		}
	}

	//
	db, eru := client.CreateDatabase(ctx, db_name, nil)
	if eru != nil {
		log.Fatal(eru)
	}

	//
	return &DataBase{
		DB:          db,
		ctx:         ctx,
		collections: make(map[string]*Collection),
	}
}

// Получение коллекции
func (db *DataBase) GetCollection(name string) (*Collection, error) {
	col, ok := db.collections[name]
	if ok {
		return col, nil
	}

	return nil, errors.Errorf("Collection %v not exists", name)
}

// Добавление коллекции
func (db *DataBase) AddCollection(name string) (*Collection, error) {
	col, ok := db.collections[name]
	if ok {
		return col, nil
	}

	//
	col, err := NewCollection(db.ctx, db.DB, name)
	if err != nil {
		return nil, err
	}

	// Зарегистрируем
	db.collections[name] = col

	return col, nil
}