package main

import (
	"fmt"

	wire "v.io/v23/services/syncbase"
	"v.io/v23/syncbase"
	"v.io/v23/context"
)

/// open the db at sbService specified by id
func openDB(ctx *context.T, sbService syncbase.Service, id wire.Id,
	createIfAbsent bool) (
	syncbase.Database, error,
) {
	db := sbService.DatabaseForId(id, nil)
	exists, err := db.Exists(ctx);
	if err != nil {
		return nil, fmt.Errorf("failed checking for db %q: %v", db.FullName(), err)
	}

	if !exists {
		if createIfAbsent {
			if err := db.Create(ctx, nil); err != nil {
				return nil, fmt.Errorf("%s\nDeveloper's note: double-check your permissions!", err)
			}
		} else {
			return nil, fmt.Errorf("db %q does not exist", db.FullName())
		}
	}

	return db, nil
}
